神经网络不会学习-简单的分类问题

时间:2019-06-01 16:03:45

标签: python-3.x machine-learning keras neural-network classification

我目前正在尝试学习简单的神经网络,可以识别4种不同的输出。实际上有这样的2值输入:

输出+均匀(-0.2,0.2)+1

该数据只有200条记录-但是对我来说,保持尽可能少的数据非常重要。

旁边的输入和输出示例:

0.9936288071867917,1.0163870658585894  -  0

2.0133450399223953,1.9965272907556022  -  1

3.013918319917813,3.018102735071009  -  2

3.9935640040186025,4.00379069782054  -  3

我尝试设置不同的时期,隐藏的神经元和激活功能。我要使神经网络保持非常简单-这意味着仅两个隐藏层,每层最多有大约20个隐藏神经元。 不管我做什么,仍然不会学或学得很差。

这里的代码

import keras
import numpy as np
from sklearn.model_selection import train_test_split
#import pandas as pd
#import tensorflow as tf
from sklearn.utils import shuffle
from sklearn import metrics

seed = 10
np.random.seed(seed)

dataset = np.loadtxt("dataset.csv",delimiter=',')
#dataset = shuffle(dataset)

X = dataset[:,:2]
Y = dataset[:,2]

#print(X)
#print(Y)

(X_train,X_test,Y_train,Y_test) = train_test_split(X, Y, test_size=0.10, random_state=seed)
input_shape = (2,)

model = keras.models.Sequential()
model.add(keras.layers.InputLayer(input_shape))
model.add(keras.layers.core.Dense(8, activation='sigmoid'))
model.add(keras.layers.core.Dense(4, activation='sigmoid'))

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
history = model.fit(X_train,Y_train,validation_split=0.10,epochs=30)


val_loss, val_acc = model.evaluate(X_test,Y_test)
print('\nCost = ',val_loss,'\nAccuracy = ',val_acc,'\n')

通过时期(几乎相同)和评估,我仍然得到如下所示的结果:

Cost =  1.40975821018219 
Accuracy =  0.20000000298023224 

我该怎么做才能改善神经网络?

2 个答案:

答案 0 :(得分:1)

您可能要更改的第一件事是最后一层的激活功能。由于您有4个不同的输出,因此softmax是正确的激活功能。

observeEvent(event_data("plotly_selected", source = 'RFAcc_FP1'), {

您下一步应该做的就是替换

model.add(keras.layers.core.Dense(4, activation='softmax'))

 model.add(keras.layers.core.Dense(8, activation='sigmoid'))

答案 1 :(得分:0)

可能还有更多内容,但是首先想到的是规范化数据。如您在该图中所看到的:this plot
对于1、2、3和4,S形的值相差不大。但是,如果您的值在-1到1之间,则会得到更好的结果。