theano-function()参数简介

例:f = theano.function(
          inputs=[x,y],#输入参数
          outputs=[prediction, xent],#输出参数
          updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb)))#共享变量参数更新
1).inputs:要输入的自变量参数

  2).outputs:要输出的因变量参数

  3).updates:对共享变量w,b进行更新,形如(共享变量,表达式),即根据表达式对共享变量进行更新

要初始化VGG网络的参数,可以按照以下步骤: 1. 导入必要的库和模块: ``` import numpy as np import theano import theano.tensor as T import lasagne ``` 2. 定义VGG网络的结构,可以参考如下代码: ``` def build_model(input_var=None): network = lasagne.layers.InputLayer(shape=(None, 3, 224, 224), input_var=input_var) network = lasagne.layers.Conv2DLayer(network, num_filters=64, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=64, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2), stride=2) network = lasagne.layers.Conv2DLayer(network, num_filters=128, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=128, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2), stride=2) network = lasagne.layers.Conv2DLayer(network, num_filters=256, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=256, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=256, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2), stride=2) network = lasagne.layers.Conv2DLayer(network, num_filters=512, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=512, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=512, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2), stride=2) network = lasagne.layers.Conv2DLayer(network, num_filters=512, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=512, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.Conv2DLayer(network, num_filters=512, filter_size=(3, 3), stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify, W=lasagne.init.GlorotUniform()) network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2), stride=2) return network ``` 这里定义了一个包含13个卷积层和5个最大池化层的VGG网络,每个卷积层都使用了GlorotUniform初始化方法。 3. 加载预训练的权重文件: ``` def load_weights(): # Load the pre-trained weights url = 'https://s3.amazonaws.com/lasagne/recipes/pretrained/imagenet/vgg19_normalized.pkl' filename = 'vgg19_normalized.pkl' if not os.path.exists(filename): urllib.urlretrieve(url, filename) with open(filename, 'rb') as f: model = pickle.load(f) return model['param values'] ``` 这里使用了pickle库来加载预训练的权重文件,并返回其中的参数值。 4. 初始化参数: ``` input_var = T.tensor4('inputs') target_var = T.ivector('targets') network = build_model(input_var) weights = load_weights() lasagne.layers.set_all_param_values(network, weights) ``` 这里首先定义了输入和目标变量,然后调用了前面定义的build_model函数来构建VGG网络,接着调用load_weights函数加载预训练的权重文件,并使用lasagne.layers.set_all_param_values函数将参数值设置到网络中。 5. 编译模型: ``` prediction = lasagne.layers.get_output(network) loss = lasagne.objectives.categorical_crossentropy(prediction, target_var) loss = loss.mean() params = lasagne.layers.get_all_params(network, trainable=True) updates = lasagne.updates.momentum(loss, params, learning_rate=0.01, momentum=0.9) train_fn = theano.function([input_var, target_var], loss, updates=updates) ``` 这里首先定义了预测值和损失函数,然后使用lasagne.layers.get_all_params函数获取所有可训练的参数,接着使用lasagne.updates.momentum函数定义更新规则,最后使用theano.function函数编译模型。 现在,我们就完成了VGG网络参数的初始化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值