【问题标题】:Intuition behind Neural Network Results?神经网络结果背后的直觉?
【发布时间】:2018-07-28 00:51:20
【问题描述】:

我正在尝试建立一个神经网络来分类毒蘑菇,但结果不正确。该模型编译成功,但是有人可以提供直觉,说明为什么训练结果在几个 epoch 之后看起来如此准确。这似乎不正确,是数据预处理出错了吗?

数据集可以在这里找到:https://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data

代码如下:

import keras.utils
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd

# seed weights
np.random.seed(3)

# import dataset
data = pd.read_csv('agaricus-lepiota.csv', delimiter=',')

# encode labels as integers so the can be one-hot-encoded which takes int matrix
le = preprocessing.LabelEncoder()
data = data.apply(le.fit_transform)

# one-hot-encode string data (now type int)
ohe = preprocessing.OneHotEncoder(sparse=False)
data = ohe.fit_transform(data)

X = data[:, 1:23]
Y = data[:, 0:1]

# split into test and train set
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=.2, random_state=5)

# create model
model = Sequential()
model.add(Dense(500, input_dim=22, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=1000, batch_size=25)

【问题讨论】:

    标签: tensorflow machine-learning neural-network keras classification


    【解决方案1】:

    一个时期就是很多次迭代(n=training_set_size/batch_size)。考虑到你有这么多层并且没有正则化,我会怀疑过度拟合。

    【讨论】:

    • 我同意但是,当我将网络减少到只有两层(输入层中的 5 个神经元,输出层中的 1 个神经元)时,它在一个 epoch 之后仍然以 100% 的准确度在测试集上执行。可能这种措施是正确的,但似乎不太可能。
    • 你可以尝试线性分类(只有一个输出 sigmoid 神经元)看看你得到了什么准确度,然后增加层数以获得更高的准确度。
    • 线性分类的准确率进展:imgur.com/a/W52zY
    • 谢谢安德烈。
    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2017-02-21
    • 2018-05-06
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多