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

我正在尝试使用 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 文件中创建任何训练命令。我已经多次重新运行代码,并确保我运行的是正确的文件。不过,似乎没有任何效果。


谢谢您的帮助!


神不在的星期二
浏览 395回答 1
1回答

杨__羊羊

问题可能出在您的 VSCode IDE 上,它需要额外的配置才能与 Python 及其包一起工作——当您运行一个脚本时,您可能正在运行所有脚本,因此会出现这种行为。我推荐的一个解决方案是切换到Spyder并使用Anaconda安装您的软件包。两者都安装好后,在 PC 上搜索“anaconda command prompt”或“anaconda powershell”,然后在终端中输入:conda update condaconda update --allconda install numpy # optional (sort of)conda install matplotlib # optional (sort of)# SEE BELOWconda install -c conda-forge kerasconda 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,运行脚本 - 假设没有错误,一切都应该很好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python