python - 使用 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 完成教程,我没有遇到张量形状,现在我有点迷路了。对不起,这个基本问题,你们能帮助一个菜鸟吗?谢谢!
解决方案
在调用 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))
这样,您可以在输入模型之前从目录中重塑图像。
推荐阅读
- javascript - 解析错误:标识符已被声明
- python - 数据增强映射函数中的Tensorflow随机数
- php - Laravel 动态数据库关系
- scala - 如何配置 IntelliJ Scala 插件以使用 Scala 的本机演示编译器?
- python - 从字符串中提取数组
- kubernetes - 使用 gitlab runner 部署 K8s 时出现问题,出现错误
- android - Flutter Webview - 在 Android 上捕获 touchstart 事件
- angular - Rxjs Behavior Subject 值改变而不调用 next
- sql - 静态分析:分析时发现2个错误。SQL 错误
- filter - 我可以在 kafka 流应用程序的 peek 或 filter 或分支中做一些有状态的操作吗?