Следующий код работал у меня. Просто внесены некоторые изменения в x, y из makeData, чтобы преобразовать их в числа с плавающей запятой. Кроме того, аргумент, переданный для прогнозирования, должен быть трехмерным (в настоящее время у вас есть 2-й аргумент), и он должен быть плавающим. Также необходимо добавить сначала LSTM return последовательностей = True, потому что после него еще есть LSTM. Кроме того, ваша модель немного странная. Keras ожидает, что входные данные для последовательной модели будут иметь форму (batch_size, timesteps, input_dim). У вас есть timesteps = 1 и, следовательно, на самом деле нет последовательности. Но это отдельный вопрос о том, чем вы хотите заниматься. Что касается запуска кода, указанные выше настройки сработали.
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM
import random
import numpy as np
def makeData(total, types=5):
#PATTERNS:
#1)going up by 1
#2)going up by 2
#3)muliply by 3
#4)multiple by 2
#5)square number
NumPer = int(total/types)
Labels = []
Data = []
print(NumPer)
for type in range(types):
for i in range(NumPer):
preData = []
if type == 0:
x = random.random()*100
x = round(x)
preData.append(x)
preData.append(x+1)
preData.append(x+2)
Labels.append([x+3])
if type == 1:
x = random.random()*100
x = round(x)
preData.append(x)
preData.append(x+2)
preData.append(x+4)
Labels.append([x+6])
if type == 2:
x = random.random()*100
x = round(x)
preData.append(x)
preData.append(x*3)
preData.append(x*9)
Labels.append([x*27])
if type == 3:
x = random.random()*100
x = round(x)
preData.append(x)
preData.append(x*2)
preData.append(x*4)
Labels.append([x*8])
if type == 4:
x = random.random()*100
x = round(x)
preData.append(x)
preData.append(x*x)
preData.append((x*x)*(x*x))
Labels.append([(x*x)*(x*x)*((x*x)*(x*x))])
Data.append(preData)
return np.array(Data), np.array(Labels)
x, y = makeData(5)
x = x.astype(float)
y = y.astype(float)
def MakeRNN():
model = Sequential()
model.add(LSTM(3, activation='tanh', return_sequences=True))
model.add(Dense(9, activation='relu'))
model.add(LSTM(9, activation='tanh'))
model.add(Dense(36, activation='relu'))
model.add(Dense(1, activation='relu'))
model.compile(optimizer='Adam', loss="mse", metrics=['accuracy'])
return model
Model = MakeRNN()
print(x.shape)
x = x.reshape(-1,1,3)
print(y[0].dtype)
print(x.shape)
Model.fit(x,y, epochs=20)
print(Model.predict(np.array([[[1.0,2.0,3.0]]])))