Пытаюсь реализовать модель линейной регрессии на keras. Для этого я использую один входной нейрон и нейрон смещения(хотя в обучающей выборке отсутствует смещение), сигдоидную функцию для активации. Но результаты меня не очень радуют. Как можно увеличить точность? Правильно ли я нормализую входные данные?
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import *
import numpy as np
#hyperparameters
epochs = 60
epo = np.arange(0, epochs, 1)
n_samples = 40
train_x = np.linspace(0, 20, n_samples) #входы
train_y = -2 * np.linspace(0, 20, n_samples) #+ 4 * np.random.rand(n_samples) #правильные ответы
x = train_x.reshape(-1, 1)
y = train_y.reshape(-1, 1)
leng = 10 ** len(str(int(max(y)))) #для нормализации
x = x / leng
y = y / leng
model = Sequential()
model.add(Dense(units = 1, input_shape = (1, )))
model.add(Activation('sigmoid'))
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['mse', 'acc'])
history = model.fit(x = x, y = y, batch_size = 1, epochs = epochs)
test_x = np.linspace(0, 20, n_samples)
w, b = model.get_weights()
plt.subplot(211)
plt.scatter(train_x, train_y)
plt.plot(train_x, train_x * w[0] + b)
plt.title('result')
print(history.history['acc'])
plt.subplot(212)
plt.plot(history.history['loss'], epo)
plt.title('loss')
plt.show()
График предсказанной прямой на фоне выборке изображен наверху, а график потери внизу.
P.S. в Keras-е я новичок.