Python 将Conv2DNet的输出形状与预期张量匹配
我试图实现Keras中提出的模型。我或多或少认为Keras模型相当于: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.
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
是图像中的最大字符数,在本例中为64NC
是可能的不同字符数,在本例中为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
中的字符进行一次热编码。您说得对,谢谢。我的缺点是盲目复制代码。现在开始工作了