【问题标题】:Keras batch normalization stops convergenceKeras 批量标准化停止收敛
【发布时间】:2018-07-28 06:31:25
【问题描述】:

我是 keras 的新手,并且一直在尝试各种东西,例如 BatchNormalization,但它根本不起作用。当 BatchNormalization 行被注释掉时,它会收敛到大约 0.04 损失或更好,但它会收敛到 0.71 并卡在那里,我不确定出了什么问题。

from sklearn import preprocessing
from sklearn.datasets import load_boston
from keras.models import Model
from keras.layers import Input, Dense
from keras.layers.normalization import BatchNormalization
import keras.optimizers

boston = load_boston()

x = boston.data
y = boston.target

normx = preprocessing.scale(x)
normy = preprocessing.scale(y)

# doesnt construct output layer
def layer_looper(inputs, number_of_loops, neurons):
    inputs_copy = inputs
    for i in range(number_of_loops):

        inputs_copy = Dense(neurons, activation='relu')(inputs_copy)
        inputs_copy = BatchNormalization()(inputs_copy)

    return inputs_copy

inputs = Input(shape = (13,))

x = layer_looper(inputs, 40, 20)

predictions = Dense(1, activation='linear')(x)

model = Model(inputs=inputs, outputs=predictions)

opti = keras.optimizers.Adam(lr=0.0001)
model.compile(loss='mean_absolute_error', optimizer=opti, metrics=['acc'])

print(model.summary())

model.fit(normx, normy, epochs=5000, verbose=2, batch_size=128)

我尝试过尝试使用批量大小和优化器,但它似乎不是很有效。我是不是做错了什么?

【问题讨论】:

    标签: keras batch-normalization


    【解决方案1】:

    我已将学习率提高到0.01,并且网络似乎能够学习到一些东西(我得到Epoch 1000/5000- 0s - loss: 0.2330)。

    我认为从Batch Normalization 原始论文的摘要中值得注意以下几点:

    批标准化允许我们使用更高的学习率和 初始化时不要那么小心。它还充当正则化器 (...)

    这暗示了学习率的提高(你可能想尝试一下)。

    请注意,由于它的工作原理类似于正则化,BatchNorm 应该使您的训练损失更严重 - 它应该防止过度拟合,从而缩小训练和测试/有效错误之间的差距。

    【讨论】:

    • 感谢您的帮助!让我更清楚了。
    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 2020-01-15
    • 2019-10-30
    • 2019-05-07
    • 2017-11-24
    • 2011-02-03
    • 2019-05-23
    • 2017-03-03
    相关资源
    最近更新 更多