需要帮助在数据集上应用1D CNN



我正在处理自己的数据集,该数据集存储在csv文件中。它有三列:val1|val2|label。共有6个标签。行数和列数分别为2000和3。我想创建一个1D CNN网络,它接受输入val1和val2,并可以预测标签。到目前为止,我已经尝试过

df = pd.read_csv("data.csv")
x = df.drop(["label"], axis=1)   #x.shape = (2000, 2)
x = np.expand_dims(x,-1)         #x.shape = (2000, 2, 1)
y = df.label                     #y.shape = (2000, 1)
y = to_categorical(y)            #y.shape = (2000, 6)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.2)
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2, activation='relu', input_shape=(2,1)))
model.add(Dropout(0.2))
model.add(MaxPooling1D(pool_size=1))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(6, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train,
batch_size=64,
epochs=100,
verbose=1,
validation_data=(X_valid,y_valid),
shuffle=True,
)

上述模型给出的验证和训练精度最高仅为30%。

我尝试过的事情:数据扩充。更改筛选器的数量。增加层数。

如何提高模型的准确性?

有很多选项可以尝试:

  • 利用学习率
  • 尝试不同的模型体系结构
    • 尝试一个完全连接的神经网络。只有两个1D输入,你的输入中真的有CNN可以利用的网格结构吗?FCNN可能更适合您的任务
    • 去除脱落,因为这可能会支持底部装配
    • 假设你吃不饱,增加你网络中的神经元数量
    • 尝试完全不同的模型类型,例如决策树、逻辑回归、SVM或随机森林
  • 检查您的数据。也许它不够干净,无法让网络从中推断出一些东西。应用数据清理,例如,如果存在不一致
  • 提供更多数据。这总是取决于你的问题,但2000个数据点可能没有那么多

这不是一个详尽的列表。第一步肯定是检查你的数据。你的培训和验证表现都很低,这表明你的能力不足。这意味着你的模型太小或过于正则化(Dropout(。我觉得你的模型太大太复杂了,但这取决于你的任务。尝试逻辑回归、SVM或FCNN。如果你的任务确实很复杂,试着收集更多的数据或推断出更多的问题结构。

最新更新