如何在训练后保存和加载我的神经网络模型以及Python中的权重?

S.h*_*san 7 python pickle scikit-learn

我用Python训练了一个单层神经网络模型(一个没有keras和tensorflow的简单模型)。在Python中训练后如何将其与权重一起保存,以及稍后如何加载?

Shu*_*hal 7

所有可训练的参数(如权重和偏差)都可以视为 Python 列表或 NumPy 数组(这是首选)。

对于 Python 列表:

如果您的可训练参数是 Python 列表,那么您可以使用pickle. 你可以pickle这样:

import pickle
# weights is a Python array
pickle.dump( weights , open( 'weights.pkl' , 'wb' ) )
Run Code Online (Sandbox Code Playgroud)

您可以将多个对象组合到一个setlist和 pickle 中,这样您就拥有一个文件。为了阅读它,

weights = pickle.load( open( 'weights.pkl' , 'rb' ))
Run Code Online (Sandbox Code Playgroud)

对于 NumPy 数组:

这使得所有代码变得简单。NumPy 数组可以通过 using 方法保存np.array.save()

np.save( 'weights.npy' , weights )
Run Code Online (Sandbox Code Playgroud)

并加载它,

weights = np.load( 'weights.npy' )
Run Code Online (Sandbox Code Playgroud)

除了这些流行的方法之外,例如将权重和偏差写入文本文件或 csv 文件也可能有效。此外,JSON 文件可能会有所帮助。


moh*_*mlo 1

所以你自己写下来。您需要一些简单的步骤:

  1. 在神经网络代码中,将权重存储在变量中。可以通过使用 self.weights 来简单地完成。weights 是 numpy ndarrays。例如,如果权重介于 10 个神经元层和 100 个神经元层之间,则它是一个 10 * 100(或 100* 10)nd 数组。
  2. 用于numpy.save保存 ndarray。
  3. 下次使用网络时,请使用numpy.load加载权重
  4. 在网络的第一次初始化中,使用您加载的权重。不要忘记,如果您的网络经过训练,权重应该被冻结。可以通过将学习率归零来完成。