Python 将Conv2DNet的输出形状与预期张量匹配

Python 将Conv2DNet的输出形状与预期张量匹配,python,machine-learning,keras,conv-neural-network,Python,Machine Learning,Keras,Conv Neural Network,我试图实现Keras中提出的模型。我或多或少认为Keras模型相当于: inputShape = (32, 640, 3) model = Sequential() model.add(Conv2D(NC//2, kernel_size=(4,4), strides=(2,2), kernel_regularizer=regularizers.l2(1e-5), activation='relu', padding='same', input_shape=inputShape)) model.

我试图实现Keras中提出的模型。我或多或少认为Keras模型相当于:

inputShape = (32, 640, 3)

model = Sequential()
model.add(Conv2D(NC//2, kernel_size=(4,4), strides=(2,2), kernel_regularizer=regularizers.l2(1e-5), activation='relu', padding='same', input_shape=inputShape))
model.add(Conv2D(NC, kernel_size=(4,4), strides=(2,1), activation='relu', kernel_regularizer=regularizers.l2(1e-5), padding='same'))
model.add(Conv2D(NC, kernel_size=(8,5), strides=(8,5), activation='relu', kernel_regularizer=regularizers.l2(1e-5), padding='same'))
model.add(Reshape((-1, MAX_CHAR, NC)))
训练数据由5000、32x640个随机生成字符串的图像组成,分为两个数组,输入
A
和输出
Y
<代码>A是图像矩阵
(NIMG、高度、宽度、通道)
Y
是字符矩阵
(NIMG,MAX\u CHAR)

MAX_CHAR
是图像中的最大字符数,在本例中为64
NC
是可能的不同字符数,在本例中为63

问题是,当我运行
model.fit(A,Y)
时,我得到:

ValueError: Error when checking target: expected reshape_1 to have 4 dimensions, but got array with shape (5001, 64)
这是有道理的,因为在博客帖子中它是这样说的:

目标矩阵是三维矩阵 分别对应于样本、字符和1-hot编码

我尝试了
model.flatte()
,但这给我留下了一个形状
(4032,)
,远远大于训练数据中的64个字符。我还尝试过使用重塑向量值,但没有真正的效果


所以我的问题是:我做错什么了吗?是否有我根本误解的东西,或者是否有我似乎无法想到/找到的解决方案

显然,正如评论中提到的,对标签进行热编码(即
Y
)解决了这个问题


注意:这个答案是以社区维基的形式发布的。

正如在博客文章中所述,
Y
应该是一个形状为
(NIMG,MAX\u CHAR,NC)
的3D矩阵,而不是
(NIMG,MAX\u CHAR)
。您需要对
Y
中的字符进行一次热编码。您说得对,谢谢。我的缺点是盲目复制代码。现在开始工作了