python - 输入形状的卷积神经网络错误
问题描述
我有 1000 张 28*28 分辨率的图像。我将这 1000 张图像转换为 numpy 数组,并形成一个大小为 (1000,28,28) 的新数组。因此,在使用 keras 创建卷积层时,输入形状(X 值)指定为(1000,28,28),输出形状(Y 值)指定为(1000,10)。因为我有 1000 个示例是输入和 10 个类别的输出。
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',kernel_initializer='he_normal',input_shape=(1000,28,28)))
.
.
.
model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)
因此,在使用fit
函数时,它显示ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (1000, 28, 28)
为错误。请帮助我为 CNN 提供正确的输入和输出维度。
代码:
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',kernel_initializer='he_normal',input_shape=(4132,28,28)))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(10, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adam(),metrics=['accuracy'])
model.summary()
train_x = numpy.array([train_x])
model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)
解决方案
您需要将输入更改为 4 维,channel
设置为1
:(1000, 28, 28, 1),并且需要将input_shape
卷积层的更改为(28, 28, 1)
:
model.add(Conv2D(32, kernel_size=(3, 3),...,input_shape=(28,28,1)))
推荐阅读
- python - 火车测试验证拆分python中的非重叠数据
- reactjs - React 没有渲染 UI 中的所有元素
- php - 我们如何检查数据库中是否不存在密码?
- spring-boot - 尝试使用 GCP 模拟器发布到主题时出错
- ios - 使用 UIScrollView 仅向左滑动
- javascript - 在这个依赖注入的例子中,控制反转出现在哪里?
- python - 如何让我的机器人更快地弹奏钢琴拼贴?
- reactjs - 无法读取 AOS 动画中未定义的属性“类型”
- python - Python中的共现矩阵仅给出两列
- html - Flask: BadRequestKeyError: 400 Bad Request: 浏览器(或代理)发送了一个服务器无法理解的请求