Python 3.x 如何使用千层面继续训练一名经过预训练的模特

Python 3.x 如何使用千层面继续训练一名经过预训练的模特,python-3.x,lasagne,pre-trained-model,Python 3.x,Lasagne,Pre Trained Model,我训练了一个有1000次迭代的网络,并希望在不从头开始的情况下,将此训练持续到2000次迭代。我阅读了解决这个问题的不同方法,并编写了下面的代码,因此最后我将参数保存在“saved_params”中。但我不明白从现在起我要用这些参数做什么 有人能告诉我怎么继续吗?如何将这些参数应用到培训过程中 from __future__ import print_function import numpy as np import theano import lasagne import pickle

我训练了一个有1000次迭代的网络,并希望在不从头开始的情况下,将此训练持续到2000次迭代。我阅读了解决这个问题的不同方法,并编写了下面的代码,因此最后我将参数保存在“saved_params”中。但我不明白从现在起我要用这些参数做什么

有人能告诉我怎么继续吗?如何将这些参数应用到培训过程中

from __future__ import print_function
import numpy as np
import theano
import lasagne
import pickle


input_var=None
ini = lasagne.init.HeUniform()

l_in = lasagne.layers.InputLayer(shape=(None, 1, 120, 120), input_var=input_var)
b= np.zeros((1, 4), dtype=theano.config.floatX)
b = b.flatten()

loc_l1 = lasagne.layers.MaxPool2DLayer(l_in, pool_size=(2, 2))
loc_l2 = lasagne.layers.Conv2DLayer(loc_l1, num_filters=20, filter_size=(5, 5), W=ini)
loc_l3 = lasagne.layers.MaxPool2DLayer(loc_l2, pool_size=(2, 2))
loc_l4 = lasagne.layers.Conv2DLayer(loc_l3, num_filters=20, filter_size=(5, 5), W=ini)
loc_l5 = lasagne.layers.DenseLayer(loc_l4, num_units=50, W=lasagne.init.HeUniform('relu'))
network = lasagne.layers.DenseLayer(loc_l5, num_units=4, b=b, W=lasagne.init.Constant(0.0), nonlinearity=lasagne.nonlinearities.identity)


def save_network(filename,param_values):
    f = open(filename, 'wb')
    pickle.dump(param_values,f,protocol=-1)
    f.close()

def load_network(filename):
    f = open(filename, 'rb')
    param_values = pickle.load(f)
    f.close()
    return param_values


save_network("model.npz",lasagne.layers.get_all_param_values(network))

saved_params = load_network("model.npz")
lasagne.layers.set_all_param_values(network, saved_params)

您可以只使用load,然后调用fit方法,或者您是否更改了参数?
如果您想要一个图形,然后为1000个纪元保存错误

您可以使用load and After call fit方法,或者您是否更改了参数?
if(load):
        net1 = Lenet(classes, num_epochs)
        net1.load_weights_from('Lenet.npz')
        network = net1
        train_X = np.float32(train_X)
        print("train_x",train_X)
        print("train_y",train_Y)
        train_Y = np.int16(train_Y)
        network = net1.fit(train_X, train_Y, num_epochs)
        print ("Loading weights successfully done.")

如果您想要一个图形,那么将错误保存为1000个纪元

此代码只是一个示例。它正在做以下事情:
if(load):
        net1 = Lenet(classes, num_epochs)
        net1.load_weights_from('Lenet.npz')
        network = net1
        train_X = np.float32(train_X)
        print("train_x",train_X)
        print("train_y",train_Y)
        train_Y = np.int16(train_Y)
        network = net1.fit(train_X, train_Y, num_epochs)
        print ("Loading weights successfully done.")
1.加载上次训练中训练的重量 2.使用相同的测试序列数据(否则您将接受测试数据培训) 3.启动网络的拟合方法(net_loaded.fit(parameters)),该方法使用模型的加载权重


要从这个级联中得到一个图,您必须保存历元图的精度值,或者您用来可视化组合结果的值。

此代码只是一个示例。它正在做以下事情: 1.加载上次训练中训练的重量 2.使用相同的测试序列数据(否则您将接受测试数据培训) 3.启动网络的拟合方法(net_loaded.fit(parameters)),该方法使用模型的加载权重


要从这个级联中得到一个图形,您必须保存历元图形的精度值,或者您用来可视化组合结果的任何东西。

谢谢您的回答,但我真的不明白。我没有改变参数。我要把你告诉我的密码放在哪里?我有一个基于本教程的文件,但架构有所改变:我在那里训练了前1000次迭代。所以我必须加载我的网络参数,我把代码放在哪里继续训练?谢谢你的回答,但我真的不明白。我没有改变参数。我要把你告诉我的密码放在哪里?我有一个基于本教程的文件,但架构有所改变:我在那里训练了前1000次迭代。所以我必须加载我的网络参数,我应该把代码放在哪里继续训练?