我正在与Keras合作,迈出神经网络的第一步。我只是尝试使用一个似乎正确的示例中的1dconv图层。我仅更改输入值的形状以适合与特征对应的训练数据(2200,513)513(长度为2200),如果我的训练数据与目标相对应,我只希望设置两个输出。那就是模型:
模型摘要:
Layer (type) Output Shape Param #
=================================================================
conv1d_37 (Conv1D) (None, 2191, 500) 2565500
_________________________________________________________________
conv1d_38 (Conv1D) (None, 2182, 500) 2500500
_________________________________________________________________
max_pooling1d_10 (MaxPooling (None, 727, 500) 0
_________________________________________________________________
conv1d_39 (Conv1D) (None, 718, 160) 800160
_________________________________________________________________
conv1d_40 (Conv1D) (None, 709, 160) 256160
_________________________________________________________________
global_average_pooling1d_10 (None, 160) 0
_________________________________________________________________
dense_10 (Dense) (None, 2) 322
=================================================================
Total params: 6,122,642
Trainable params: 6,122,642
Non-trainable params: 0
_________________________________________________________________
None
当我训练数据时出现此错误,我的最后一层没有合适的大小(674197,)...我很困惑,有什么帮助吗?
我已经将最后一层的大小更改为674197,但这没有任何意义,并且训练在两个时期后停止,而没有改善。
model_m = Sequential()
model_m.add(Conv1D(500, 10, activation='relu', input_shape=(2200,513)))
model_m.add(Conv1D(500, 10, activation='relu'))
model_m.add(MaxPooling1D(3))
model_m.add(Conv1D(160, 10, activation='relu'))
model_m.add(Conv1D(160, 10, activation='relu'))
model_m.add(GlobalAveragePooling1D(data_format='channels_last'))
model_m.add(Dropout(0.5))
model_m.add()
model_m.add(Dense(2, activation='softmax'))
ValueError: Error when checking target: expected dense_10 to have shape (2,) but got array with shape (674197,)
我希望输出应为2,所以我想保持此形状,我应该修改模型的某些部分,但要注意什么?
答案 0 :(得分:0)
所以错误不是来自模型,而是来自将目标标签字符串更改为某些向量的代码,丑陋的部分是这样的:
from keras.utils import to_categorical
listNumTarget=[int(la,32) for la in label_target_list]
target=to_categorical(listNumTarget)
我没想到“ to_categorical”函数的行为,但是似乎此函数输出是只有“ 0”和只有“ 1”的向量,它还期望标签都从0到您传递给该函数的最大数量。因此,即使列表中的标签很少,输出长度也是传递给它的最大数量。