使用Keras+Tens训练ConvNet时出现不兼容形状错误

2024-04-25 13:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个简单的卷积神经网络来将时间序列分为六类之一。由于形状不兼容错误,我在训练网络时遇到问题。在

在下面的代码中,n_feats = 1000n_classes = 6。在

Fs = 100
input_layer = Input(shape=(None, n_feats), name='input_layer')
conv_layer = Conv1D(filters=32, kernel_size=Fs*4, strides=int(Fs/2), padding='same', activation='relu', name='conv_net_coarse')(input_layer)
conv_layer = MaxPool1D(pool_size=4, name='c_maxp_1')(conv_layer)
conv_layer = Dropout(rate=0.5, name='c_dropo_1')(conv_layer)
output_layer = Dense(n_classes, name='output_layer')(conv_layer)

model = Model(input_layer, output_layer)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
print(model.summary())

这是模型摘要。在

^{pr2}$

当我运行model.fit(X_train, Y_train),其中X_train形状是(30000, 1, 1000),而{}形状是(30000, 1, 6),我得到了不兼容的形状错误:

InvalidArgumentError (see above for traceback): Incompatible shapes: [32,0,6] vs. [1,6,1]
     [[Node: output_layer/add = Add[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](output_layer/Reshape_2, output_layer/Reshape_3)]]
     [[Node: metrics_1/acc/Mean/_197 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_637_metrics_1/acc/Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

如果我移除MaxPool1DDropout层,模型训练就可以了。我没有正确指定这些层吗?在

任何帮助都将不胜感激!在


Tags: namelayerlocalhosttaskinputoutputmodeldevice
1条回答
网友
1楼 · 发布于 2024-04-25 13:47:12

所以-问题在于两个事实:

  1. 输入形状应该是(number_of_examples, timesteps, features),其中特征是每个时间步记录的内容。这意味着您应该将数据重塑为(number_of_examples, 1000, 1),因为您的时间序列有1000个时间步和1个特性。在
  2. 当你在解决分类任务时,你需要把你的输入压缩成向量(从一个序列)。我建议您在Dropout层之前使用Flatten。在

相关问题 更多 >