具有随机权重的神经网络无法学习

时间:2018-05-07 09:28:35

标签: python tensorflow machine-learning neural-network keras

我想比较使用在imagenet上预训练的VGG16模型的分类器,以及如果我不使用imagenet权重它将如何执行,所以我使用

加载模型

model = applications.VGG16(weights=None, include_top=False, input_shape=(img_width, img_height, 3))

根据Keras documentation使用"权重=无"导致随机初始化的权重。

我现在的问题是神经网络总是提供相同的输出,即使在训练多个时期并尝试不同的学习速率之后,它总是将所有图像预测为同一类。

我不认为输入数据(2个不同类的图像)或我的代码是问题,因为在使用imagenet权重和训练进行初始化时,我的分类器学得很好并且在测试集上达到了90%的准确度。 / p>

问题是什么?也许重量初始化?但在加载像

这样的模型时,我不知道如何使用不同的初始化程序

1 个答案:

答案 0 :(得分:0)

您可能正面临消失的梯度问题。

如果使用relu激活功能,请查看“ kaiming初始化”以了解您的体重。目的是在前进过程中的每一层之后,将输出的平均值保持为0,并将标准偏差保持为1。

对于relu激活功能,您必须使用随机正态分布乘以2 /(给定层的输入数量)的平方根来初始化。

weight_initialisation = random_normal * sqrt(2/(number of input for the layer))

对于CNN,我认为输入数将是过滤器数*内核中的单元数(对于[5,5]内核,则为5 * 5)