Keras Flatten Layer – 无效参数错误,矩阵未展平?

解释,然后是代码,然后是输出,最后是错误信息:

看起来Flatten层没有正常工作,输出形状取决于批量大小(当我设置BATCH_SIZE=32时,[1,32768]变成了[1,16384])。我实在搞不明白自己哪里做错了,或者如何修复这个问题。我已经查看了Keras文档中关于Flatten和Dense层的部分。此外,我使用的是TensorFlow后端,并且这确实反映在keras.json文件中。

这是我的代码:

BATCH_SIZE = 64EPOCHS = 1000EPOCH_STEP = 50vgg = keras.applications.vgg16.VGG16(include_top=False,weights='imagenet',input_shape=(48,48,3))vgg_input = vgg.inputsvgg_output = vgg.outputs#freeze the vgg layersfor layer in vgg.layers:    layer.trainable = Falseprint('~~~~~~~~~~~~~~~~~~~~~~Tensors~~~~~~~~~~~~~~')print('vgg_output tensor:')print(vgg_output)print()model_tensor = Flatten()(vgg_output)print('flattened vgg_output tensor:')print(model_tensor)print()model_tensor = Dense(32, activation='relu')(model_tensor)print('dense FC flattened vgg_output tensor:')print(model_tensor)print('~~~~~~~~~~~~~~~~~~~~~~Tensors~~~~~~~~~~~~~~')model_tensor = Dense(2, activation='softmax')(model_tensor)model = Model(inputs=vgg_input,outputs=model_tensor)print('Model architecture made')#CHOSEN ARBITRARILY FOR NOWmodel.compile(optimizer='rmsprop',            loss='binary_crossentropy',            metrics=['accuracy'])print('Model Compiled')             print(model.summary())#train top modelval_batch, val_labels = dataGenerator.generateDataBatch(256)print('validation batch loaded')batch, labels = dataGenerator.generateDataBatch(2048)print('training batch loaded')print('t-batch shape: ' + str(batch.shape))print('t-batch lable shape: ' + str(labels.shape))        model.fit(x=batch,y=labels,batch_size=BATCH_SIZE,epochs=EPOCHS,verbose=2,validati    on_data=(val_batch,val_labels),shuffle=True)

打印输出:

Printed Info:~~~~~~~~~~~~~~~~~~~~~~Tensors~~~~~~~~~~~~~~vgg_output tensor:[<tf.Tensor 'block5_pool/MaxPool:0' shape=(?, 1, 1, 512) dtype=float32>]flattened vgg_output tensor:Tensor("flatten_1/Reshape:0", shape=(?, ?), dtype=float32)dense FC flattened vgg_output tensor:Tensor("dense_1/Relu:0", shape=(?, 32), dtype=float32)~~~~~~~~~~~~~~~~~~~~~~Tensors~~~~~~~~~~~~~~_________________________________________________________________Layer (type)                 Output Shape              Param #=================================================================input_1 (InputLayer)         (None, 48, 48, 3)         0_________________________________________________________________block1_conv1 (Conv2D)        (None, 48, 48, 64)        1792_________________________________________________________________block1_conv2 (Conv2D)        (None, 48, 48, 64)        36928_________________________________________________________________block1_pool (MaxPooling2D)   (None, 24, 24, 64)        0_________________________________________________________________block2_conv1 (Conv2D)        (None, 24, 24, 128)       73856_________________________________________________________________block2_conv2 (Conv2D)        (None, 24, 24, 128)       147584_________________________________________________________________block2_pool (MaxPooling2D)   (None, 12, 12, 128)       0_________________________________________________________________block3_conv1 (Conv2D)        (None, 12, 12, 256)       295168_________________________________________________________________block3_conv2 (Conv2D)        (None, 12, 12, 256)       590080_________________________________________________________________block3_conv3 (Conv2D)        (None, 12, 12, 256)       590080_________________________________________________________________block3_pool (MaxPooling2D)   (None, 6, 6, 256)         0_________________________________________________________________block4_conv1 (Conv2D)        (None, 6, 6, 512)         1180160_________________________________________________________________block4_conv2 (Conv2D)        (None, 6, 6, 512)         2359808_________________________________________________________________block4_conv3 (Conv2D)        (None, 6, 6, 512)         2359808_________________________________________________________________block4_pool (MaxPooling2D)   (None, 3, 3, 512)         0_________________________________________________________________block5_conv1 (Conv2D)        (None, 3, 3, 512)         2359808_________________________________________________________________block5_conv2 (Conv2D)        (None, 3, 3, 512)         2359808_________________________________________________________________block5_conv3 (Conv2D)        (None, 3, 3, 512)         2359808_________________________________________________________________block5_pool (MaxPooling2D)   (None, 1, 1, 512)         0_________________________________________________________________flatten_1 (Flatten)          (None, 512)               0_________________________________________________________________dense_1 (Dense)              (None, 32)                16416_________________________________________________________________dense_2 (Dense)              (None, 2)                 66=================================================================Total params: 14,731,170Trainable params: 16,482Non-trainable params: 14,714,688_________________________________________________________________NoneModel CompiledModel architecture madeModel Compiledvalidation batch loadedtraining batch loadedt-batch shape: (2048, 48, 48, 3)t-batch lable shape: (2048, 2)

错误信息的最后一部分(我可以添加所有内容,但其余部分看起来没有帮助):

tensorflow.python.framework.errors_impl.InvalidArgumentError: Matrix size-incompatible: In[0]: [1,32768], In[1]: [512,32]     [[Node: dense_1/MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:CPU:0"](flatten_1/Reshape, dense_1/kernel/read)]]

编辑:在model.compile()之后立即添加了print(model.summary())的输出。


回答:

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注