Форум сайта python.su
Доброго времени.
Как предсказать следующий шаг последовательности.
Например есть последовательность.
112233112233112233…….
или
111211312111211312…….
Последовательность может быть любая.
Но как обучить нейронную сеть чтобы она определяла следующий шаг последовательности.
есть такой код.
Но эта нейронная сеть не предсказывает следующий шаг, а повторяет предидущии.
А как это исправить я не понимаю.
Может есть тут знатоки которые помогут решить задачу.
import numpy import pandas as pd import math from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error from sklearn.metrics import accuracy_score # convert an array of values into a dataset matrix def create_dataset(dataset, look_back): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): xset = [] for j in range(dataset.shape[1]): a = dataset[i:(i+look_back), j] xset.append(a) dataX.append(xset) dataY.append(dataset[i + look_back,0]) return numpy.array(dataX), numpy.array(dataY) # fix random seed for reproducibility numpy.random.seed(1) # load the dataset file='test123456.xlsx' xl=pd.ExcelFile(file) dataframe = xl.parse('Sheet1') dataset = dataframe.values dataset = dataset.astype('float32') # normalize the dataset scaler = MinMaxScaler(feature_range=(0,1)) dataset = scaler.fit_transform(dataset) # split into train and test sets train_size = int(len(dataset) * 0.75) test_size = len(dataset) - train_size train, test = dataset[0:train_size,:],dataset[train_size:len(dataset),:] # reshape into X=t and Y=t+1 look_back = 1 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back) # reshape input to be [samples, time steps, features] trainX = numpy.reshape(trainX, (trainX.shape[0],1,trainX.shape[1])) testX = numpy.reshape(testX, (testX.shape[0],1,testX.shape[1])) # create and fit the LSTM network model = Sequential() model.add(LSTM(8, input_shape=(1, look_back))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='Adam') model.fit(trainX, trainY, epochs=10000, batch_size=1, verbose=2) # make predictions trainPredict = model.predict(trainX) testPredict = model.predict(testX) # invert predictions trainPredict = scaler.inverse_transform(trainPredict) trainY = scaler.inverse_transform([trainY]) testPredict = scaler.inverse_transform(testPredict) testY = scaler.inverse_transform([testY]) # print("X=%s, Predicted=%s" % (testPredict[-1],testX[-1])) print("X=%s, Predicted=%s" % (testPredict[0],testX[0]))
Офлайн
Antonio0608Если вы говорите любая, то например может быть и случайная последовательность.
Последовательность может быть любая.
Офлайн
Мне кажется последовательность может быть любой.
Главное я не могу понять как обучить нейросеть. Анализировать, искать паттерны и делать прогноз.
в интернете есть много о прогнозировании временных рядов, но чаще все сводится к регрессии, или просто от среднего.
а вот как научить нейросеть работать с чистыми последовательстями. например последовательность Фиббоначи или любыми другими. Может нейросеть сама понять что это последовательность а не простой набор символов. не обязательно это могут быть цифры или буквы и т.д.
Офлайн
Antonio0608
Может нейросеть сама понять что это последовательность а не простой набор символов
Офлайн
Грубо говоря.
Нейросеть не способна на основе предидущих событий сделать прогноз.
так я понимаю.
это же ерунда.
Даже этот код способен делать предсказание но только для последовательности
123123123123……
но это больше не предсказание а перебор предидущих вариантов.
Офлайн
Antonio0608
Нейросеть не способна на основе предидущих событий сделать прогноз.
так я понимаю.
это же ерунда.
Antonio0608
Может нейросеть сама понять что это последовательность а не простой набор символов
Офлайн
Я понимаю это.
Почему мой код, не делает предсказание следующего шага? А просто перебирает предидущие.
Меняя настроики нейросети. Предсказание остается одно и тоже.
Где ошибка в моем коде?
В файле ексель.
Последовательность
112233112233112233112233…. и так повторяется пару сотню десятков раз.
Офлайн
С экспертами видно недобор на форуме.
Может легче разобрать код по частям.
Вот у меня вопрос.
Почему если менять параметры в первой части кода, то это не влияет на конечный результат.
например.
тут 0
def create_dataset(dataset, look_back=0): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): xset = [] for j in range(dataset.shape[1]): a = dataset[i:(i+look_back), j] xset.append(a) dataX.append(xset) dataY.append(dataset[i + look_back,0]) return numpy.array(dataX), numpy.array(dataY) X=[2.0298948], Predicted=[[0.5]] X=[2.2400405], Predicted=[[1.]]
def create_dataset(dataset, look_back=-1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): xset = [] for j in range(dataset.shape[1]): a = dataset[i:(i+look_back), j] xset.append(a) dataX.append(xset) dataY.append(dataset[i + look_back,0]) return numpy.array(dataX), numpy.array(dataY) X=[2.0298948], Predicted=[[0.5]] X=[2.2400405], Predicted=[[1.]]
def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): xset = [] for j in range(dataset.shape[1]): a = dataset[i:(i+look_back), j] xset.append(a) dataX.append(xset) dataY.append(dataset[i + look_back,0]) return numpy.array(dataX), numpy.array(dataY) X=[2.0298948], Predicted=[[0.5]] X=[2.2400405], Predicted=[[1.]]
Отредактировано Antonio0608 (Июль 25, 2020 14:20:26)
Офлайн
вот код моооощщщщного искусственного интеллекта,он может предсказать следующее число(правда только в правильной последовательности
sequence = '123456' def forecasting(sequence): try: for i in range(len(sequence)): if sequence[i] != sequence[-1]: if int(sequence[i+1]) == int(sequence[i])+1: continue else: n = int(sequence[-1]) + 1 print(sequence) print(f"что дальше,не понятно,но моооожет быть {n}") return False else: n = int(sequence[-1])+1 print(sequence) print(f"вероятно,следующее число {n}") except: print(sequence) print("это для меня сложная последовательность") forecasting(sequence)
Отредактировано xam1816 (Июль 26, 2020 22:21:19)
Офлайн
Antonio0608Где-то в обучении нейросети. Надо нейросеть сначала построить. Потом надо дать нейросети много пар вида (входные данные, правильный результат) , по которым она научится правильно определять. Потом обученной нейросети даются входные данные, похожие на входные данные при обучении, и она выдаёт результат для них.
Где ошибка в моем коде?
Отредактировано py.user.next (Июль 27, 2020 03:47:31)
Офлайн