Tensorflow 如何保存和恢复Keras LSTM模型?
我训练了一个LSTM网络来预测股票价格,但我不知道如何保存和恢复它 下面是我的代码:Tensorflow 如何保存和恢复Keras LSTM模型?,tensorflow,keras,lstm,prediction,Tensorflow,Keras,Lstm,Prediction,我训练了一个LSTM网络来预测股票价格,但我不知道如何保存和恢复它 下面是我的代码: CONST_TRAINING_SEQUENCE_LENGTH = 12 CONST_TESTING_CASES = 5 def dataNormalization(data): return [(datum - data[0]) / data[0] for datum in data] def dataDeNormalization(data, base): return [(datum
CONST_TRAINING_SEQUENCE_LENGTH = 12
CONST_TESTING_CASES = 5
def dataNormalization(data):
return [(datum - data[0]) / data[0] for datum in data]
def dataDeNormalization(data, base):
return [(datum + 1) * base for datum in data]
def getDeepLearningData(ticker):
# Step 1. Load data
data = pandas.read_csv('./data/Intraday/' + ticker + '.csv')[
'close'].tolist()
# Step 2. Building Training data
dataTraining = []
for i in range(len(data) - CONST_TESTING_CASES * CONST_TRAINING_SEQUENCE_LENGTH):
dataSegment = data[i:i + CONST_TRAINING_SEQUENCE_LENGTH + 1]
dataTraining.append(dataNormalization(dataSegment))
dataTraining = numpy.array(dataTraining)
numpy.random.shuffle(dataTraining)
X_Training = dataTraining[:, :-1]
Y_Training = dataTraining[:, -1]
# Step 3. Building Testing data
X_Testing = []
Y_Testing_Base = []
for i in range(CONST_TESTING_CASES, 0, -1):
dataSegment = data[-(i + 1) * CONST_TRAINING_SEQUENCE_LENGTH:-i * CONST_TRAINING_SEQUENCE_LENGTH]
Y_Testing_Base.append(dataSegment[0])
X_Testing.append(dataNormalization(dataSegment))
Y_Testing = data[-CONST_TESTING_CASES * CONST_TRAINING_SEQUENCE_LENGTH:]
X_Testing = numpy.array(X_Testing)
Y_Testing = numpy.array(Y_Testing)
# Step 4. Reshape for deep learning
X_Training = numpy.reshape(X_Training, (X_Training.shape[0], X_Training.shape[1], 1))
X_Testing = numpy.reshape(X_Testing, (X_Testing.shape[0], X_Testing.shape[1], 1))
return X_Training, Y_Training, X_Testing, Y_Testing, Y_Testing_Base
def predict(model, X):
predictionsNormalized = []
for i in range(len(X)):
data = X[i]
result = []
for j in range(CONST_TRAINING_SEQUENCE_LENGTH):
predicted = model.predict(data[numpy.newaxis, :, :])[0, 0]
result.append(predicted)
data = data[1:]
data = numpy.insert(data, [CONST_TRAINING_SEQUENCE_LENGTH - 1], predicted, axis=0)
predictionsNormalized.append(result)
return predictionsNormalized
def plotResults(Y_Hat, Y):
plt.plot(Y)
for i in range(len(Y_Hat)):
padding = [None for _ in range(i * CONST_TRAINING_SEQUENCE_LENGTH)]
plt.plot(padding + Y_Hat[i])
plt.show()
def predictLSTM(ticker):
# Step 1. Load data
X_Training, Y_Training, X_Testing, Y_Testing, Y_Testing_Base = getDeepLearningData(ticker)
# Step 2. Build model
model = Sequential()
model.add(LSTM(
input_shape=(None, 1),
units=50,
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(
200,
return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.add(Activation('linear'))
model.compile(loss='mse', optimizer='rmsprop')
# Step 3. Train model
model.fit(X_Training, Y_Training,
batch_size=512,
epochs=27,
validation_split=0.05)
# Step 4. Predict
predictionsNormalized = predict(model, X_Testing)
# Step 5. De-nomalize
predictions = []
for i, row in enumerate(predictionsNormalized):
predictions.append(dataDeNormalization(row, Y_Testing_Base[i]))
# Step 6. Plot
plotResults(predictions, Y_Testing)
predictLSTM(ticker='IBM')
现在所有的预测结果都是历史数据。但是我想用这个模型来预测未来的价格。任何朋友都可以用特定的代码来帮助
任何朋友都可以帮我,真的很感激 这很简单。首先必须保存模型的json,然后保存模型的权重。保存重量、结构和完整keras模型后,删除先前创建的模型
from pathlib import Path
# Save neural network structure
model_structure = model.to_json()
f = Path("C:\\----yourfolderpath.json")
f.write_text(model_structure)
print('done')
# Save neural network's trained weights
your_model.save_weights("C:\\---------yourfolderpath_weights.h5")
print('done')
# or you can save the full model via:
your_model.save('C:\\---------yourfolderpath_fullkeras_model.h5')
#delete your model in memory
del your_model
#Know to load your model use:
my_new_model = tf.keras.models.load_model("path to model")
#compile my_new_model:
my_new_model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
中描述了保存模型及其权重的步骤。以下是一份总结:
- 要保存模型和权重,请使用模型的
函数save()
- 对于仅存储模型定义,您可以获取其JSON或YAML描述:
# model reconstruction from JSON:
from keras.models import model_from_json
model = model_from_json(json_string)
# model reconstruction from YAML:
from keras.models import model_from_yaml
model = model_from_yaml(yaml_string)
- 如果您只想存储权重,请使用
predicted_output = model.predict(input, batch_size=BS)
非常感谢你的朋友!你能告诉我“通过编译初始化你的模型”的更具体步骤或代码吗?我在深度学习方面真的很新。例如,我如何通过“通过编译初始化你的模型”预测ibm股票真的很精确!欢迎光临。我也是新来的。您需要调用“model.predict()”`这是文档:嗨,亲爱的朋友,你能帮我解决这个相关问题吗?非常感谢!嗨,朋友们,当尝试预测时,输出=模型。预测(新数据,批量大小=512)嗨,亲爱的朋友,你能帮我解决这个相关问题吗?非常感谢@Martin我们需要在LSTM中存储所有参数吗?当我有1K大小的LSTM单元时,还有其他选择吗?你必须存储所有的数据。否则,您将丢失从培训中获得的信息。
# model reconstruction from JSON:
from keras.models import model_from_json
model = model_from_json(json_string)
# model reconstruction from YAML:
from keras.models import model_from_yaml
model = model_from_yaml(yaml_string)
model.save_weights('my_model_weights.h5') # to store
model.load_weights('my_model_weights.h5') # to load
predicted_output = model.predict(input, batch_size=BS)