我应该如何更改我的神经网络模型以使最后一个致密(2个激活)层



我正在与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'))

value error:检查目标时错误:预期的dense_10具有形状(2,(,但具有形状的数组(674197,(

我希望输出应该是2,所以我想保持这种形状,我应该修改模型的某些部分,但是哪个?

,因此错误不是来自模型,而是来自将目标字符串更改为某个向量的代码,丑陋的部分是这样:

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到0您传递到功能的最大号码。因此,即使列表中的标签很少,输出长度也是您传递给它的数字的最大值。

最新更新