当张量流中的参数数量较少时,如何初始化权重?

时间:2019-05-11 08:01:15

标签: tensorflow

我正在张量流中进行一维卷积。 并且在第一转换层中,总的滤波器形状为(20,1,32)。(这意味着我将20设置为滤波器长度,输入通道为1,滤波器数为32)

因此,对于每个过滤器,参数的数量只有20个,我认为很小。

当我使用tf.contrib.layers.variance_scaling_initializer()初始化它们时,对于每个过滤器,均值都大于0(其中一些接近0.17),我认为这是一个BAD初始化,因为这样做初始损失比预期的要大得多!!!(我正在使用5级的softmax损失,所以初始损失应该接近1.6,但是我得到7!)

所以,我的问题是:

  1. 就像他们在cs231n中所说的那样,我们应该始终检查该初始化是否良好。但是,如果初始化不正确,损失会逐渐减少(先减小到1.6,然后减小)。那么,这是否意味着不好的初始化就可以了,如果我能减少损耗的话?

  2. 如果不好的初始化不正确,当我的张量流中的参数数量很少时,如何避免这种情况?

附录:

这是我在初始化后为这32个第一层转化滤波器计算出的均值和标准差。

32个过滤器的平均值:(预期为0)

array([0.07561917,0.04490322,-0.01038277,0.01666651,0.05551032,         0.05633939、0.06824012、0.09641276,-0.00689114,-0.06346136,         0.17798263,-0.00941322,-0.07475428、0.02626908,-0.0602317,        -0.05718945,-0.09374037,-0.00634143,-0.17978422,-0.0451125,        -0.04540939、0.1242936,-0.0885914,-0.07105278、0.03706203,         0.13295507,-0.00468415、0.07477994、0.02145212、0.13121174,         0.14259626,0.02244328],dtype = float32)

32个过滤器的STD :(使用He初始化时预期sqrt(1/20)= 0.316)

array([0.33232737,0.32201403,0.28631812,0.31096256,0.30847445,        0.29019815,0.29457024,0.3253386,0.3021869,0.2607277,        0.35225883、0.37418598、0.26132312、0.33346793、0.3290348,        0.29029182、0.35049775、0.38683736、0.31210637、0.32691506,        0.30270815、0.24408878、0.31148645、0.27651423、0.3147946,        0.31480902、0.37011388、0.305197、0.35488558、0.25145507,        0.26631626,0.25363052],dtype = float32)

0 个答案:

没有答案