Я сейчас пытаюсь научиться простой нейронной сети распознавать 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
Что я могу сделать, чтобы улучшить эту нейронную сеть?