将Conv2DNet的输出形状与预期张量卡住了

时间:2018-08-30 00:03:43

标签: python machine-learning keras conv-neural-network

我正在尝试在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)

这很有道理,就像博客文章中所说的那样:

  

目标矩阵是具有三个维度的3D矩阵   分别对应于样本,字符和1-hot编码。

我尝试过model.Flatten(),但是给我留下了形状(4032,),比训练数据中的64个字符大得多。我还尝试过使用“重塑”矢量值,但无济于事。

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

1 个答案:

答案 0 :(得分:0)

显然,如注释中所述,对标签(即Y)进行一键编码解决了该问题。

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