为什么我的准确性和损失以keras为0.000和nan?

时间:2020-06-30 20:12:50

标签: python tensorflow machine-learning keras conv-neural-network

我的理解是,“ sparse_categorical_crossentropy”适合我的多种分类,而无需进行一次热编码。万一它超出了预测,我也减慢了亚当的学习速度。

我不确定自己做错了什么,对此我不确定。

我的输入数据与此类似: enter image description here

我的输出预测结果是标签:[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())

这是错误结果: enter image description here

模型图层(如果有帮助):

enter image description here

1 个答案:

答案 0 :(得分:1)

我发现您的方法存在两个主要问题

您的标签从1到10 ...它们必须从0开始,以使其在0-9范围内。只需执行y_train-1y_test-1(如果y_test和y_train是numpy数组)即可实现

您网络的最后一层必须为Dense(10, activation='softmax'),其中10是要预测的类数,而softmax用于生成多类问题中的概率

使用sparse_categorical_crossentropy没问题,因为您的目标编码为整数