我在学习机器学习,并尝试构建一个简单的TensorFlow模型。当我训练模型时,我的损失值大约是10。
5s 83us/step - loss: 9.6847 - acc: 0.3971
模型代码如下:
model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(10, activation=tf.nn.softmax)])model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.fit(x_train, y_train, epochs=3)
但随后我使用以下代码对数据集进行了归一化处理
x_train = keras.utils.normalize(x_train, axis=1)
然后损失值下降到了1以下。
问题是它做了什么以至于产生如此大的影响?
回答:
“问题是它做了什么以至于产生如此大的影响?”它将训练数据归一化到数据的L2范数上,实现。这样做的目的是为了避免某个特定的样本在权重更新过程中占据主导地位。也可以参考这个问题的回答。在这个回答中,使用一个包含两个特征的逻辑回归示例解释了归一化的原因。