为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的 Keras 模型在我加载后会进行训练,即使我实际上并没有提供任何新的训练数据?

为什么我的 Keras 模型在我加载后会进行训练,即使我实际上并没有提供任何新的训练数据?

神不在的星期二 2022-06-02 12:11:48
我正在尝试使用 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 learningimport tensorflow as tffrom tensorflow.python.keras import layersimport numpy as np# Load/save dataimport pickleimport os# Shufflingfrom sklearn.utils import shuffle# Parametersepochs = 5display_step = 1000n_input = 5wordvec_len = 5n_hidden = 512recurrent_dropout = 0dropout = 0# Load datawith 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 文件中创建任何训练命令。我已经多次重新运行代码,并确保我运行的是正确的文件。不过,似乎没有任何效果。谢谢您的帮助!
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

问题可能出在您的 VSCode IDE 上,它需要额外的配置才能与 Python 及其包一起工作——当您运行一个脚本时,您可能正在运行所有脚本,因此会出现这种行为。我推荐的一个解决方案是切换到Spyder并使用Anaconda安装您的软件包。两者都安装好后,在 PC 上搜索“anaconda command prompt”或“anaconda powershell”,然后在终端中输入:


conda update conda

conda update --all

conda install numpy # optional (sort of)

conda install matplotlib # optional (sort of)

# SEE BELOW

conda install -c conda-forge keras

conda update --all # final 'cleanup' command - ensures package compatibility

如果您打算使用 GPU(强烈推荐),您需要先下载 CUDA -此处的说明(获取 CUDA 10 而不是文章中的 9)。然后conda install tensorflow-gpu按照文章运行。


然后,在 Spyder 中:Tools -> Preferences -> PYTHONPATH manager-> 添加您计划使用的模块/数据的所有文件夹,这样您就不必%cd每次都担心相对路径,可以直接导入。最后,确保 Anaconda & Spyder 使用正确的Python 解释器。


重新启动 Spyder,运行脚本 - 假设没有错误,一切都应该很好。


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 1 关注
  • 394 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号