【问题标题】:how to continue training of a pretrained model using lasagne如何使用千层面继续训练预训练模型
【发布时间】:2017-10-25 16:11:16
【问题描述】:

我用 1000 次迭代训练了一个网络,并希望在不从头开始的情况下继续训练到 2000 次迭代。我阅读了针对这个问题的不同方法并编写了下面的代码,所以最后我的参数位于“saved_pa​​rams”中。但从现在开始,我不明白我必须用这些参数做什么。

有人能解释一下如何继续吗?如何将这些参数用于我的训练过程?

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)

【问题讨论】:

    标签: python-3.x lasagne pre-trained-model


    【解决方案1】:

    您可以只使用 load 然后调用 fit 方法还是更改了参数? 如果你想要一个图表,那么将你的错误保存为 1000 个时期

    【讨论】:

      【解决方案2】:
      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.")
      

      【讨论】:

      • 感谢您的回答,但我真的不明白。我没有更改参数。我必须把你告诉我的代码放在哪里?我有一个基于本教程的文件,但架构发生了变化:github.com/Lasagne/Lasagne/blob/master/examples/mnist.py 我在其中训练了前 1000 次迭代。所以我必须加载我的网络参数,我应该把代码放在哪里继续训练?
      【解决方案3】:

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

      要从这个级联中得到一个图表,你必须保存你的准确度值在 epoch graph 上或者你用来可视化组合结果的任何东西。

      【讨论】:

        猜你喜欢
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 2020-09-30
        • 2019-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-28
        相关资源
        最近更新 更多