为了实现更高的精确度准确率,我应该对这个模型进行哪些更改?

我正在使用一个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)。

这个数据集可以在这里找到这里,并使用以下代码加载到内存中:

import numpy as npx = 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.]

这代表第一号参赛者赢得了比赛。

提前感谢!


回答:

首先,对于数值数据,完全不要使用卷积层。

只需使用3到4个Dense层,并加入适当的正则化层,如BatchNorm和Dropout,就可以得到不错的拟合。另外,由于你的y(目标)是一热编码的,你需要使用softmax。使用默认的Adam学习率,应该就足够了。

分类交叉熵 + Softmax = 多类分类
二元交叉熵 + Sigmoid = 多标签分类

关于100个变量,批次形状应该是(None, 2800, 100)。2800指的是数据点的数量(行),100指的是每个样本的特征数(列),None指的是批次大小。你需要将其重塑为(2800, 100)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注