如何重置千层面网络的重量?

时间:2017-02-12 14:08:46

标签: theano lasagne

如果检测到“nan”,我想重置卷积神经网络的权重。

我不知道该怎么做。

我也很困惑,如果我在这种情况下也应该改变种子。

        if np.isnan(trainingLoss):
            print "..Training Loss is NaN"
            self.reset_network()

        if np.isnan(validationLoss):
            print "..Validation Loss is NaN"
            self.reset_network()

我应该如何实施reset_network()?

1 个答案:

答案 0 :(得分:1)

我不确定这是重置网络权重的预期方法,但这是我如何做到的。在下面的代码中,network是对CNN的引用,其中包含2个卷积层,后跟最大池化层。我相信它也应该与其他架构一起使用。

这里的技巧是使用初始化函数更新网络的所有可训练参数。

def reset_weights(network):
    params = lasagne.layers.get_all_params(network, trainable=True)
    for v in params:
        val = v.get_value()
        if(len(val.shape) < 2):
            v.set_value(lasagne.init.Constant(0.0)(val.shape))
        else:
            v.set_value(lasagne.init.GlorotUniform()(val.shape))

我希望它有所帮助!