python - 为什么我的准确性和损失,0.000 和 nan,在 keras 中?
问题描述
我的理解是“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())
模型层(如果有帮助):
解决方案
我在您的方法中发现了两个主要问题
您的标签是从 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
没问题,因为你有整数编码的目标
推荐阅读
- javascript - Admin SDK 无法为 Firestore 设置设置
- vue.js - Vuetify v-text-field 更改值
- java - Javafx - 将项目添加到与另一个类文件夹不同的类文件夹中的可观察列表的正确方法是什么
- r - 机器学习:R 中逻辑回归的随机梯度下降:计算 Eout 和平均时期数
- php - Vich上传包没有在上传文件夹中保存大图像
- python - 从包含不同键/值的另一个对象中选择 JSON 键
- php - Laravel 5.5:获取服务提供者中的所有注册路由
- css - 根据里面的内容调整绝对定位元素的宽度
- json - 使用 NodeJS 和 Axios 获取 IoT 代理
- linux - NVIDIA Jetson TX2 中无法识别的命令行选项“-m64”