python - X_train 和 y_train 匹配吗?卷积神经网络 - 无分割字符识别
问题描述
我正在尝试训练用于图像字符识别的卷积神经网络。一张图片包含 7 个字符(0-9、AZ、空格 => 37 个字符的可能性)。总共有 646 张图像。这些图像是 X_train 数据。
X_train.shape
(646, 600, 1200, 1)
我还有一个包含所有图像标签的数据表。我对这些标签进行了一次热编码以获取数组。
y_train.shape
(646, 7, 37)
646是图像的数量,所以是行维度。7是标签的长度,列的尺寸。37 是可能的字符数,深度维度。
我希望我的卷积神经网络能够自动识别图像上的字符,而无需像本文中的作者那样对字符进行任何分割或空间规范:https ://ieeexplore.ieee.org/abstract/document/8078501
我现在想知道 X_train 和 y_train 是否适合我的神经网络?也许我必须重塑 X_train 或 y_train 的维度,因为当我运行这段代码时:
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape = (600, 1200, 1), activation = "relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(64, activation = "relu"))
model.add(Dense(7, activation = "relu"))
model.add(Dense(37, activation = "softmax"))
model.compile(optimizer="rmsprop", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(X_train, y_train, batch_size = 32, epochs = 10, shuffle = True)
我收到以下错误:
ValueError: Error when checking target: expected dense_3 to have 2 dimensions, but got array with shape (646, 7, 37)
感谢您的所有建议!
解决方案
我重新定义了网络以匹配 y 输出形状,我可以对性能说任何话
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape = (600, 1200, 1), activation = "relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Lambda(lambda x: tf.expand_dims(x,1)))
model.add(Dense(64, activation = "relu"))
model.add(Dense(7, activation = "relu"))
model.add(Permute((2, 1)))
model.add(Dense(37, activation = "softmax"))
摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_6 (Conv2D) (None, 598, 1198, 32) 320
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 299, 599, 32) 0
_________________________________________________________________
dropout_6 (Dropout) (None, 299, 599, 32) 0
_________________________________________________________________
flatten_5 (Flatten) (None, 5731232) 0
_________________________________________________________________
lambda_3 (Lambda) (None, 1, 5731232) 0
_________________________________________________________________
dense_15 (Dense) (None, 1, 64) 366798912
_________________________________________________________________
dense_16 (Dense) (None, 1, 7) 455
_________________________________________________________________
permute (Permute) (None, 7, 1) 0
_________________________________________________________________
dense_17 (Dense) (None, 7, 37) 74
=================================================================
推荐阅读
- html - 当我将它放在 Html 脚本标签中并通过浏览器打开 html 时,React 包不起作用
- linux - bash检查文件中的所有行是否等于“数字”
- java - 如何在 BOX Api 中上传文件:空指针异常
- c++ - Vowpal Wabbit 是否支持在训练期间添加和删除功能?
- spring - Bean 名称错误的 BindingResult 和普通目标对象都不是
- swift - 如何衡量异步方法的性能?
- html - CSS 样式表适用于某些属性,但不是全部
- javascript - 在 Accordion 菜单中隐藏部分
- sql - 在 SQL Server 表的多行中查找重复的 **Set of Values**
- c# - 我编写了一个用于合并 Excel 工作表的控制台应用程序。我收到以下错误