Python 3.x Tensorflow无效形状(InvalidArgumentError)
model.fit产生异常:Python 3.x Tensorflow无效形状(InvalidArgumentError),python-3.x,tensorflow,tensor,tensorflow2.0,Python 3.x,Tensorflow,Tensor,Tensorflow2.0,model.fit产生异常: tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot update variable with shape [] using a Tensor with shape [32], shapes must be equal. [[{{node metrics/accuracy/AssignAddVariableOp}}]] [[loss/dense_l
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot update variable with shape [] using a Tensor with shape [32], shapes must be equal.
[[{{node metrics/accuracy/AssignAddVariableOp}}]]
[[loss/dense_loss/categorical_crossentropy/weighted_loss/broadcast_weights/assert_broadcastable/AssertGuard/pivot_f/_50/_63]] [Op:__inference_keras_scratch_graph_1408]
模型定义:
model = tf.keras.Sequential()
model.add(tf.keras.layers.InputLayer(
input_shape=(360, 7)
))
model.add(tf.keras.layers.Conv1D(32, 1, activation='relu', input_shape=(360, 7)))
model.add(tf.keras.layers.Conv1D(32, 1, activation='relu'))
model.add(tf.keras.layers.MaxPooling1D(3))
model.add(tf.keras.layers.Conv1D(512, 1, activation='relu'))
model.add(tf.keras.layers.Conv1D(1048, 1, activation='relu'))
model.add(tf.keras.layers.GlobalAveragePooling1D())
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(32, activation='softmax'))
输入特征形状
(105, 360, 7)
输入标签形状
(105, 32, 1)
编译语句
model.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
model.fit(features,
labels,
epochs=50000,
validation_split=0.2,
verbose=1)
Model.fit语句
model.compile(optimizer='adam',
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
model.fit(features,
labels,
epochs=50000,
validation_split=0.2,
verbose=1)
非常感谢您的帮助您可以使用
model.summary()
查看您的模型体系结构
print(model.summary())
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d (Conv1D) (None, 360, 32) 256
_________________________________________________________________
conv1d_1 (Conv1D) (None, 360, 32) 1056
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 120, 32) 0
_________________________________________________________________
conv1d_2 (Conv1D) (None, 120, 512) 16896
_________________________________________________________________
conv1d_3 (Conv1D) (None, 120, 1048) 537624
_________________________________________________________________
global_average_pooling1d (Gl (None, 1048) 0
_________________________________________________________________
dropout (Dropout) (None, 1048) 0
_________________________________________________________________
dense (Dense) (None, 32) 33568
=================================================================
Total params: 589,400
Trainable params: 589,400
Non-trainable params: 0
_________________________________________________________________
None
输出层的形状要求为
(无,32)
,但标签的形状为(105,32,1)
。因此,您需要将形状更改为(105,32)
np.squese()
函数用于从数组形状中删除一维项。您可以使用model.summary()
查看您的模型体系结构
print(model.summary())
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d (Conv1D) (None, 360, 32) 256
_________________________________________________________________
conv1d_1 (Conv1D) (None, 360, 32) 1056
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 120, 32) 0
_________________________________________________________________
conv1d_2 (Conv1D) (None, 120, 512) 16896
_________________________________________________________________
conv1d_3 (Conv1D) (None, 120, 1048) 537624
_________________________________________________________________
global_average_pooling1d (Gl (None, 1048) 0
_________________________________________________________________
dropout (Dropout) (None, 1048) 0
_________________________________________________________________
dense (Dense) (None, 32) 33568
=================================================================
Total params: 589,400
Trainable params: 589,400
Non-trainable params: 0
_________________________________________________________________
None
输出层的形状要求为(无,32)
,但标签的形状为(105,32,1)
。因此,您需要将形状更改为(105,32)
np.squence()
函数用于从数组形状中删除一维项。在密集层之前使用flatte()。在密集层之前使用flatte()。尝试将标签的形状更改为(105,32)
通过np.squence(标签)
@giser\u yugang哇,谢谢,这似乎奏效了。你能解释一下原因吗?创建回复,我会将其标记为正确答案。Thanksry通过np.挤压(标签)
@giser\u yugang哇,谢谢,这看起来很有效。你能解释一下原因吗?创建回复,我会将其标记为正确答案。谢谢