gpt4 book ai didi

python - 加载保存的检查点并预测不会产生与训练中相同的结果

转载 作者:IT老高 更新时间:2023-10-28 21:14:26 28 4
gpt4 key购买 nike

我正在根据我在 Internet 上找到的示例代码进行培训。测试的准确率为 92%,检查点保存在一个目录中。同时(培训已经进行了 3 天)我想创建我的预测代码,这样我就可以了解更多信息,而不仅仅是等待。

这是我深度学习的第三天,所以我可能不知道自己在做什么。以下是我试图预测的方式:

  • 使用与训练中相同的代码来实例化模型
  • 加载最后一个检查点
  • 尝试预测

代码有效,但结果远未达到 90%。

这是我创建模型的方法:

INPUT_LAYERS = 2
OUTPUT_LAYERS = 2
AMOUNT_OF_DROPOUT = 0.3
HIDDEN_SIZE = 700
INITIALIZATION = "he_normal" # : Gaussian initialization scaled by fan_in (He et al., 2014)
CHARS = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ .")

def generate_model(output_len, chars=None):
"""Generate the model"""
print('Build model...')
chars = chars or CHARS
model = Sequential()
# "Encode" the input sequence using an RNN, producing an output of HIDDEN_SIZE
# note: in a situation where your input sequences have a variable length,
# use input_shape=(None, nb_feature).
for layer_number in range(INPUT_LAYERS):
model.add(recurrent.LSTM(HIDDEN_SIZE, input_shape=(None, len(chars)), init=INITIALIZATION,
return_sequences=layer_number + 1 < INPUT_LAYERS))
model.add(Dropout(AMOUNT_OF_DROPOUT))
# For the decoder's input, we repeat the encoded input for each time step
model.add(RepeatVector(output_len))
# The decoder RNN could be multiple layers stacked or a single layer
for _ in range(OUTPUT_LAYERS):
model.add(recurrent.LSTM(HIDDEN_SIZE, return_sequences=True, init=INITIALIZATION))
model.add(Dropout(AMOUNT_OF_DROPOUT))

# For each of step of the output sequence, decide which character should be chosen
model.add(TimeDistributed(Dense(len(chars), init=INITIALIZATION)))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model

在一个单独的文件 predict.py 我导入这个方法来创建我的模型并尝试预测:

...import code
model = generate_model(len(question), dataset['chars'])
model.load_weights('models/weights.204-0.20.hdf5')

def decode(pred):
return character_table.decode(pred, calc_argmax=False)


x = np.zeros((1, len(question), len(dataset['chars'])))
for t, char in enumerate(question):
x[0, t, character_table.char_indices[char]] = 1.

preds = model.predict_classes([x], verbose=0)[0]

print("======================================")
print(decode(preds))

我不知道问题是什么。我的目录中有大约 90 个检查点,我正在根据准确性加载最后一个检查点。所有这些都由 ModelCheckpoint 保存:

checkpoint = ModelCheckpoint(MODEL_CHECKPOINT_DIRECTORYNAME + '/' + MODEL_CHECKPOINT_FILENAME,
save_best_only=True)

我被困住了。我做错了什么?

最佳答案

在您提供的 repo 中,训练和验证语句在被输入模型之前被反转(通常在 seq2seq 学习中完成)。

dataset = DataSet(DATASET_FILENAME)

如你所见,inverted的默认值为True,问题是倒置的。

class DataSet(object):
def __init__(self, dataset_filename, test_set_fraction=0.1, inverted=True):
self.inverted = inverted

...

question = question[::-1] if self.inverted else question
questions.append(question)

您可以尝试在预测过程中反转句子。具体来说,

x = np.zeros((1, len(question), len(dataset['chars'])))
for t, char in enumerate(question):
x[0, len(question) - t - 1, character_table.char_indices[char]] = 1.

关于python - 加载保存的检查点并预测不会产生与训练中相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46074863/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com