首页 > 解决方案 > 使用 Keras 设计 CNN:了解张量形状

问题描述

刚从 ML 开始,想创建自己的 CNN 来检测人脸图像的方向。我按照教程接受 64x64x1 的输入图像,这是我的代码:

from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator()
train_it = datagen.flow_from_directory('firstThousandTransformed/', class_mode='categorical', batch_size=64, color_mode="grayscale")
val_it = datagen.flow_from_directory('validation/', class_mode='categorical', batch_size=64, color_mode="grayscale")

imageInput = Input(shape=(64,64,1))
conv1 = Conv2D(32, kernel_size=4, activation='relu')(imageInput)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(16, kernel_size=4, activation='relu')(pool1)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
flat = Flatten()(pool2)
hidden1 = Dense(10, activation='relu')(flat)
output = Dense(4, activation='sigmoid')(hidden1)
model = Model(inputs=imageInput, outputs=output)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(train_it, steps_per_epoch=16, validation_data=val_it, validation_steps=8)

但是,当我尝试运行时出现此错误:

reshape 的输入是一个具有 3810304 个值的张量,但请求的形状需要 2704 的倍数 [[node model/flatten/Reshape (定义在 c:\Users\cdues\Desktop\kerasTutorial\orentationTry.py:33)]] [操作:__inference_train_function_836]

以下是我的模型摘要:

在此处输入图像描述

我需要一些帮助来理解什么是张量形状以及我的代码在哪里出错了。刚刚使用 Keras 完成教程,我没有遇到张量形状,现在我有点迷路了。对不起,这个基本问题,你们能帮助一个菜鸟吗?谢谢!

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


在调用 flow_from_directory 时尝试使用 target_size 参数。

train_it = datagen.flow_from_directory('firstThousandTransformed/',
                                       class_mode='categorical', 
                                       batch_size=64,
                                       color_mode='grayscale',
                                       target_size=(64,64))

val_it = datagen.flow_from_directory('validation/',
                                      class_mode='categorical',
                                      batch_size=64,
                                      color_mode='grayscale',
                                      target_size=(64,64))

这样,您可以在输入模型之前从目录中重塑图像。


推荐阅读