我正在张量流中进行一维卷积。 并且在第一转换层中,总的滤波器形状为(20,1,32)。(这意味着我将20设置为滤波器长度,输入通道为1,滤波器数为32)
因此,对于每个过滤器,参数的数量只有20个,我认为很小。
当我使用tf.contrib.layers.variance_scaling_initializer()初始化它们时,对于每个过滤器,均值都大于0(其中一些接近0.17),我认为这是一个BAD初始化,因为这样做初始损失比预期的要大得多!!!(我正在使用5级的softmax损失,所以初始损失应该接近1.6,但是我得到7!)
所以,我的问题是:
就像他们在cs231n中所说的那样,我们应该始终检查该初始化是否良好。但是,如果初始化不正确,损失会逐渐减少(先减小到1.6,然后减小)。那么,这是否意味着不好的初始化就可以了,如果我能减少损耗的话?
如果不好的初始化不正确,当我的张量流中的参数数量很少时,如何避免这种情况?
附录:
这是我在初始化后为这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)