【发布时间】:2020-12-10 03:14:44
【问题描述】:
我正在使用 keras 卷积 2d 神经网络来解决分类问题,但是我可以达到的最佳准确度约为 30%。我应该怎么做才能用这个模型获得更高的精度?
这是我用来创建模型的代码:
model = Sequential()
model.add(Conv2D(128, kernel_size=(3,3), input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(128, kernel_size=(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(20, activation='softmax'))
adam = Adam(lr=3e-4)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
x 数据包含 2480 场比赛,每场比赛有 20 名跑步者,以及每个跑步者的 100 个变量,总形状为 (2480, 20, 100) y 数据代表每场比赛的获胜者,是一个热编码的 2480 场比赛,每场比赛有 20 个 y 标签。总形状为 (2480, 20)
这个数据集可以在here找到并使用以下代码加载到内存中:
import numpy as np
x = np.loadtxt("x_data").reshape(2480, 20, 100)
y = np.loadtxt("y_data").reshape(2480, 20)
所有这些数据都是存储在纯文本数据中的浮点变量。 x 是 100 * 20 * 2480 个变量 y 是 20 * 2480 个变量
y 中的第一个值看起来像
[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
这代表一号赛跑者赢得比赛
提前致谢
【问题讨论】:
-
那么您的 y 数据究竟代表什么?在帖子本身中包含数据的 sn-p 并不是一个坏主意。很少有人会费心从外部来源下载您的数据。
-
y 数据代表比赛的获胜者,只是它是一个单热编码数组,我已经编辑了问题以希望使其更清晰
-
首先,我会使用 sigmoid 激活,因为您本质上存在二进制分类问题。
-
谢谢您的回复,您的意思是更换softmax吗?或者我用过的relu激活?当我使用 sigmoid 而不是其中任何一个时,网络似乎没有学习.. val_accuracy 根本没有增加
-
我再次建议您阅读this 并为您的图层选择最佳参数。希望这会有所帮助!
标签: python machine-learning keras neural-network conv-neural-network