【发布时间】:2021-03-25 17:04:16
【问题描述】:
我正在尝试使用输入形状 (14400,1) 的数据在 TensorFlow 中训练一维 CNN 模型,但我收到输入形状与模型不兼容的错误。我已确保我的输入数据具有正确的形状。我正在使用 TensorFlow 版本 2.3.0
批次片段(每批次 32 个示例,数据形状 - (14400,1),标签形状 - (1,1))
batch: 0
Data shape: (32, 14400, 1) (32, 1, 1)
batch: 1
Data shape: (32, 14400, 1) (32, 1, 1)
batch: 2
Data shape: (32, 14400, 1) (32, 1, 1)
batch: 3
Data shape: (32, 14400, 1) (32, 1, 1)
batch: 4
Data shape: (32, 14400, 1) (32, 1, 1)
batch: 5
Data shape: (32, 14400, 1) (32, 1, 1)
CNN 模型
model = Sequential()
model.add(Conv1D(128, kernel_size=5, activation='relu', input_shape=(14400,1)))
model.add(BatchNormalization())
model.add(Dropout(.2))
model.add(Conv1D(32, kernel_size=5, activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(.2))
model.add(Dense(64, activation='relu'))
model.add(Dropout(.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
模型摘要
Model: "sequential_11"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_19 (Conv1D) (None, 14396, 128) 768
_________________________________________________________________
batch_normalization_10 (Batc (None, 14396, 128) 512
_________________________________________________________________
dropout_40 (Dropout) (None, 14396, 128) 0
_________________________________________________________________
conv1d_20 (Conv1D) (None, 14392, 32) 20512
_________________________________________________________________
batch_normalization_11 (Batc (None, 14392, 32) 128
_________________________________________________________________
dropout_41 (Dropout) (None, 14392, 32) 0
_________________________________________________________________
flatten_8 (Flatten) (None, 460544) 0
_________________________________________________________________
dense_32 (Dense) (None, 128) 58949760
_________________________________________________________________
dropout_42 (Dropout) (None, 128) 0
_________________________________________________________________
dense_33 (Dense) (None, 64) 8256
_________________________________________________________________
dropout_43 (Dropout) (None, 64) 0
_________________________________________________________________
dense_34 (Dense) (None, 32) 2080
_________________________________________________________________
dropout_44 (Dropout) (None, 32) 0
_________________________________________________________________
dense_35 (Dense) (None, 1) 33
=================================================================
Total params: 58,982,049
Trainable params: 58,981,729
Non-trainable params: 320
_________________________________________________________________
导致错误的代码
history = model.fit(train_ds, validation_data=val_ds, epochs=10)
错误信息
ValueError: in user code:
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py:806 train_function *
return step_function(self, iterator)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py:789 run_step **
outputs = model.train_step(data)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py:747 train_step
y_pred = self(x, training=True)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py:976 __call__
self.name)
/data/anaconda3/envs/py36/lib/python3.6/site-packages/tensorflow/python/keras/engine/input_spec.py:168 assert_input_compatibility
layer_name + ' is incompatible with the layer: '
ValueError: Input 0 of layer sequential_11 is incompatible with the layer: its rank is undefined, but the layer requires a defined rank.
非常感谢您的帮助。
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning