请告诉我如何保存和加载变压器模型进一步培训?
这篇文章是我写的-https://wingedsheep.com/building-a-language-model
下面是它的代码-https://github.com/wingedsheep/transformer
我希望能够在经过一些训练后保存该模型,以便能够进行微调、训练并将其用于文本生成。
这就是这篇文章的作者所说的:
训练模型后,如果您可以保存它,则会很有用,因此您不必每次都训练新模型。
为此,我们将以下代码添加到WebageModel类中。
def save_checkpoint(self, path):
print(f'Saving checkpoint {path}')
torch.save({
'number_of_tokens': self.number_of_tokens,
'max_sequence_length': self.max_sequence_length,
'embedding_dimension': self.embedding_dimension,
'number_of_layers': self.number_of_layers,
'number_of_heads': self.number_of_heads,
'feed_forward_dimension': self.feed_forward_dimension,
'dropout_rate': self.dropout_rate,
'model_state_dict': self.state_dict()
}, path)
@staticmethod
def load_checkpoint(path) -> 'LanguageModel':
checkpoint = torch.load(path)
model = LanguageModel(
number_of_tokens=checkpoint['number_of_tokens'],
max_sequence_length=checkpoint['max_sequence_length'],
embedding_dimension=checkpoint['embedding_dimension'],
number_of_layers=checkpoint['number_of_layers'],
number_of_heads=checkpoint['number_of_heads'],
feed_forward_dimension=checkpoint['feed_forward_dimension'],
dropout_rate=checkpoint['dropout_rate']
)
model.load_state_dict(checkpoint['model_state_dict'])
return model
由于我们使用AutoregressiveWrapper作为便利类,我们也可以给予这个 Package 器保存和加载方法。
def save_checkpoint(self, path):
self.model.save_checkpoint(path)
@staticmethod
def load_checkpoint(path) -> 'AutoregressiveWrapper':
model = LanguageModel.load_checkpoint(path)
return AutoregressiveWrapper(model)
This makes it possible to easily save and load a trained model using.
model.save_checkpoint('./trained_model')
model = model.load_checkpoint('./trained_model')
但这并不奏效
脚本在加载创建、训练和保存的模型并尝试再次训练模型后返回一些错误。
RuntimeError: The size of tensor a (257) must match the size of tensor b (256) at non-singleton dimension 1
我理解,它,也许,但只是一点,在训练模型时,我们需要将其扩展一个单例维度,所以如果它的Tensor大小为256,它将是257,如果我们试图在代码中加载257,它希望大小为256 -我们会得到一个错误。
input_tensor.size() = torch.Size([16, 257]), mask_tensor.size() = torch.Size([16, 257])
RuntimeError: The size of tensor a (257) must match the size of tensor b (256) at non-singleton dimension 1
(+)如果你愿意自己尝试代码-在cuda上运行它会很好。你可以看看指南如何做到这一点与部分所谓的代码“在GPU上运行”。
也许我们需要保存例如一个.txt文件与Tensor大小的数字,使变量出来,但我仍然不知道该怎么办. * 请帮我弄明白 *
1条答案
按热度按时间abithluo1#
你能尝试用下面的代码加载保存的模型吗?
这也可能是由于代码中的更新引起的。如果您保存了模型,然后更改了代码,则可能无法再加载它。例如,如果你改变了词汇表的大小。