我的理解是,“ sparse_categorical_crossentropy”适合我的多种分类,而无需进行一次热编码。万一它超出了预测,我也减慢了亚当的学习速度。
我不确定自己做错了什么,对此我不确定。
我的输出预测结果是标签:[1 2 3 4 5 6 7 8 9 10](不是一次热编码)。每个数字代表我希望网络最终选择。
print(x_train.shape)
print(x_test.shape)
x_train = x_train.reshape(x_train.shape[0], round(x_train.shape[1]/5), 5)
x_test = x_test.reshape(x_test.shape[0], round(x_test.shape[1]/5), 5)
print(x_train.shape)
print(np.unique(y_train))
print(len(np.unique(y_train)))
input_shape = (x_train.shape[1], 5)
adam = keras.optimizers.Adam(learning_rate=0.0001)
model = Sequential()
model.add(Conv1D(512, 5, activation='relu', input_shape=input_shape))
model.add(Conv1D(512, 5, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(512, 5, activation='relu'))
model.add(Conv1D(512, 5, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='sparse_categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=25, validation_data=(x_test, y_test))
print(model.summary())
模型图层(如果有帮助):
答案 0 :(得分:1)
我发现您的方法存在两个主要问题
您的标签从1到10 ...它们必须从0开始,以使其在0-9范围内。只需执行y_train-1
和y_test-1
(如果y_test和y_train是numpy数组)即可实现
您网络的最后一层必须为Dense(10, activation='softmax')
,其中10是要预测的类数,而softmax用于生成多类问题中的概率
使用sparse_categorical_crossentropy
没问题,因为您的目标编码为整数