我正在尝试使用 tf.keras 使用 LSTM 模型进行训练和预测。我在两个不同的文件中编写了代码,LSTMTraining.py 用于训练 Keras 模型(并将其保存到文件中),Predict.py 应该加载到 Keras 模型中并使用它来进行预测。出于某种原因,当我在 Predict.py 中加载模型时,它开始训练,即使我没有在该文件中使用 model.fit() 命令。为什么会这样?
我已将模型保存为多种不同的文件格式。例如,我尝试将模型的架构保存到 JSON 文件中(使用 model_to_json()),并分别保存权重,然后分别加载这两个文件,然后将它们组合起来。我还尝试将它们一起保存到一个文件中(使用 model.save()),然后将其加载。
在 LSTMTraining.py 中创建和训练模型(注意:log_similarity_loss 只是我为模型创建的自定义损失函数):
# Machine learning
import tensorflow as tf
from tensorflow.python.keras import layers
import numpy as np
# Load/save data
import pickle
import os
# Shuffling
from sklearn.utils import shuffle
# Parameters
epochs = 5
display_step = 1000
n_input = 5
wordvec_len = 5
n_hidden = 512
recurrent_dropout = 0
dropout = 0
# Load data
with open("Vectorized_Word_By_Word.txt", "rb") as data:
vectorized_txt = pickle.load(data)
# Prepare data into format for training (x: [prev-words], y: [next-word])
x_train, y_train = [], []
for n in range(0, len(vectorized_txt) - n_input - 1):
prev_words = vectorized_txt[n: n+5]
next_word = vectorized_txt[n+6]
x_train.append(prev_words)
y_train.append(next_word)
x_train, y_train = np.array(x_train), np.array(y_train)
x_train, y_train = shuffle(x_train, y_train, random_state=0)
def log_similarity_loss(y_actual, y_pred):
"""Log similarity loss calculation."""
cos_similarity = tf.keras.losses.CosineSimilarity(axis=0)(y_actual, y_pred)
scaled_similarity = tf.add(tf.multiply(0.5, cos_similarity), 0.5)
return -0.5*tf.math.log(scaled_similarity)
log_similarity_loss(
[0.05, 0.01, 0.05, 1.2], [0.05, -0.01, 0.05, -1.2])
model = tf.keras.Sequential([
layers.LSTM(n_hidden, input_shape=(n_input, wordvec_len),
dropout=dropout, recurrent_dropout=recurrent_dropout,
return_sequences=True),
layers.LSTM(n_hidden, dropout=dropout,
recurrent_dropout=recurrent_dropout),
layers.Dense(wordvec_len)
])
请注意,我没有在我的 Predict.py 文件中创建任何训练命令。我已经多次重新运行代码,并确保我运行的是正确的文件。不过,似乎没有任何效果。
谢谢您的帮助!
神不在的星期二
杨__羊羊
随时随地看视频慕课网APP
相关分类