我目前正在尝试学习简单的神经网络,可以识别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
我该怎么做才能改善神经网络?
答案 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)