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

问题描述 投票:0回答:1

我正在尝试在Keras实施here模型。我或多或少地认为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和输出YA是图像矩阵(NIMG, Height, Width, Channel)Y是字符(NIMG, MAX_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热编码。

我已经尝试了model.Flatten()但是留下了一个形状(4032,),比训练数据中的64个字符大。我也试过玩Reshape矢量值,但没有真正有用。

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

python machine-learning keras conv-neural-network
1个回答
0
投票

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

注意:此答案以accepted answer"Question with no answers, but issue solved in the comments (or extended in chat)"中的建议发布为社区维基。

© www.soinside.com 2019 - 2024. All rights reserved.