Задать вопрос
BitNeBolt
@BitNeBolt

Как повысить точность модели?

Пытаюсь реализовать модель линейной регрессии на 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()


График предсказанной прямой на фоне выборке изображен наверху, а график потери внизу.
5cf664cf2631e774930711.png

P.S. в Keras-е я новичок.
  • Вопрос задан
  • 682 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Arseny_Info
@Arseny_Info
R&D engineer
Ваш train_y лежит в [-40, 0], а Activation('sigmoid') приводит все значения к [0, 1]. Уберите активацию, должно будет сойтись.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@asd111
Нормализацию легче делать через sklearn.

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
x = sc.fit_transform(x)
y = sc.fit_transform(y)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы