Прогнозирование следующих чисел в последовательности Keras - Python - PullRequest
0 голосов
/ 11 июня 2018

Я новичок в питоне и нейронных сетях.У меня есть простая сеть, написанная в Керасе, которая может предсказать следующее число в линейной последовательности:

import numpy as np

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

data = [[i for i in range(6)]];
data = np.array(data, dtype=int);
target = [[i for i in range(10, 16)]];
target = np.array(target, dtype=int);

model = Sequential();
model.add(Dense(1, input_dim=1))
model.add(Dense(1));
model.compile(loss='mean_absolute_error', optimizer = 'adam', metrics = ['accuracy']);
model.summary();
for i in range (10000):
    dataIterator = 0;
    for targetValue in target:
        model.train_on_batch(data[dataIterator], targetValue)
        dataIterator = dataIterator + 1;

predict = model.predict([28]);
print(predict);

Дает мне вывод:

[[38.0199]]

И этого следовало ожидать.Я не уверен, что в моем коде есть какие-то глупые ошибки, и буду благодарен за любые отзывы и объяснения.Я использовал Dense, потому что я не уверен, что именно делает LSTM.Другое дело, что моя модель требует ввода, чтобы иметь 2 измерения, когда оно указано:

input_dim=1

Я не понимаю, почему.Далее я хотел бы создать сеть, которая может прогнозировать следующие числа в последовательности, подобной [1, 4, 9, 16, 25].Это не так.

Обратите внимание, что это моя первая программа, написанная на Python и первое использование нейронных сетей :).Заранее спасибо!

ОБНОВЛЕНИЕ 1

В соответствии с советами по использованию шкалы я придумал что-то вроде этого:

import numpy as np

from keras.models import Sequential
from pandas import Series
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import StandardScaler

data = [[i for i in range (1,30)]];
data = np.array(data, dtype=int);
target = np.power(data, 2);
target = np.array(target, dtype=int);
target = target.reshape((len(target[0]), 1))
data = data.reshape((len(data[0]), 1))

scale = StandardScaler()

dataTest = [[i for i in range (2,4)]];
dataTest = np.array(dataTest, dtype=int);
dataTest = dataTest.reshape((len(dataTest[0]), 1))

model = Sequential();
model.add(Dense(1, input_dim=1))
model.add(Dense(1));
model.compile(loss='mean_absolute_error', optimizer = 'adam');
model.fit(scale.fit_transform(data), target, batch_size=1, epochs=200, verbose=1)

print(model.predict(scale.transform(dataTest)));

Несмотря на эти прогнозыдалеко от идеала.Для заданных тестовых данных выведите:

[[27.616932]
 [28.265278]]

В данный момент у меня нет идей :(. Не чувствую этого вообще.

1 Ответ

0 голосов
/ 11 июня 2018

И этого следовало ожидать.Я не уверен, что в моем коде есть какие-то глупые ошибки, буду признателен за любые отзывы и объяснения.Я использовал Dense, потому что я не уверен, что именно делает LSTM.

LSTM, что означает Краткосрочная память , это особый вид RNN, способныйизучения долгосрочных зависимостей.Также его используют в основном sequential processing со временем.Например, вы можете использовать LSTM, когда хотите предсказать Цены на акции Google .

Поскольку вы должны прогнозировать следующие числа в последовательности, например [1, 4, 9, 16, 25], это означает, что это регрессия модель системы обучения, которая относится к обучаемому обучению.При использовании regression моделей accuracy отсутствует.Точность регрессии моделей, называемых COD или Coefficient of determination или R в квадрате .

Используемое metric - metrics=['accuracy'] соответствует классификация проблема.Если вы хотите сделать регрессию , удалите metrics=['accuracy'].То есть просто используйте

model.compile(optimizer = 'adam',loss = 'mean_absolute_error')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...