如果检测到“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()?
答案 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))
我希望它有所帮助!