Tensorflow 我可以在分类问题中使用MSE作为损失函数和标签编码吗?
在训练过程中似乎没有问题,但我不确定MSE是如何计算的。在这种情况下,keras(或tensorflow)在计算MSE时是否会自动将标签编码转换为一种热编码?您已经通过以下方式手动将标签转换为一种热编码:Tensorflow 我可以在分类问题中使用MSE作为损失函数和标签编码吗?,tensorflow,keras,deep-learning,mnist,Tensorflow,Keras,Deep Learning,Mnist,在训练过程中似乎没有问题,但我不确定MSE是如何计算的。在这种情况下,keras(或tensorflow)在计算MSE时是否会自动将标签编码转换为一种热编码?您已经通过以下方式手动将标签转换为一种热编码: train\u labels=to\u categorical(train\u labels) 由于softmax层包含10个节点,我假设您打算对10个标签进行分类,这意味着train\u标签将类似于: Epoch 1/5 60000/60000 [======================
train\u labels=to\u categorical(train\u labels)
由于softmax层包含10个节点,我假设您打算对10个标签进行分类,这意味着train\u标签
将类似于:
Epoch 1/5
60000/60000 [==============================] - 2s 41us/step - loss: 0.2600 - acc: 0.9244
Epoch 2/5
60000/60000 [==============================] - 2s 34us/step - loss: 0.1055 - acc: 0.9679
Epoch 3/5
60000/60000 [==============================] - 2s 33us/step - loss: 0.0688 - acc: 0.9791
Epoch 4/5
60000/60000 [==============================] - 2s 35us/step - loss: 0.0504 - acc: 0.9848
Epoch 5/5
60000/60000 [==============================] - 2s 38us/step - loss: 0.0373 - acc: 0.9889
10000/10000 [==============================] - 0s 18us/step
test_acc: 0.9791
如本文所述:
softmax函数将输出类成员的概率
每个类标记并尝试最好地接近预期目标
对于给定的输入
例如,如果整数编码的类1预期为1
例如,目标向量为:
[0,1,0]softmax输出可能如下所示,这将
第一类的重量最大,其他类的重量较小
[0.09003057 0.66524096 0.24472847]
然后在这两组数据上计算均方误差,根据to_category
输出的真实标签y_true
,预测标签y_pred
为网络的softmax输出
从tensorflow源代码开始,它通过以下方式工作:
y_true
和y_pred
之间的差值,并将结果与上述两个值进行平方运算:将tensorflow导入为tf
从tensorflow.python.keras将后端导入为K
从tensorflow.python.ops导入数学运算
y_true=[0,0,0,1,0,0,0,0,0,0]
y_pred=[0.033,0.45,0.01,0.9,0,0,0.5,0.4,0.3,0.95]
数学运算平方差(y_pred,y_true)
K.平均值(数学运算平方差(y_pred,y_true))
显然,这只是一个示例,但它以与以下简化示例相同的方式处理多维计算:
K.mean(math_ops.squared_difference(y_pred, y_true))
<tf.Tensor: shape=(), dtype=float32, numpy=0.1616189>
>>y_true=[[1,0],[0,1]]
>>>y_pred=[[0.95,0.03],[0.3,0.8]]
>>>K.均值(数学运算平方差(y_pred,y_true))
你可以看到每次的结果都是一个数字,这就是你的损失
[
[0,0,0,1,0,0,0,0,0,0],... <--- One of these per training row
]
[0.033,0.45,0.01,0.9,0,0,0.5,0.4,0.3,0.95]
import tensorflow as tf
from tensorflow.python.keras import backend as K
from tensorflow.python.ops import math_ops
y_true = [0,0,0,1,0,0,0,0,0,0]
y_pred = [0.033,0.45,0.01,0.9,0,0,0.5,0.4,0.3,0.95]
math_ops.squared_difference(y_pred, y_true)
<tf.Tensor: shape=(10,), dtype=float32, numpy=
array([1.0890000e-03, 2.0249999e-01, 9.9999997e-05, 1.0000004e-02,
0.0000000e+00, 0.0000000e+00, 2.5000000e-01, 1.6000001e-01,
9.0000004e-02, 9.0249997e-01], dtype=float32)>
K.mean(math_ops.squared_difference(y_pred, y_true))
<tf.Tensor: shape=(), dtype=float32, numpy=0.1616189>
>>> y_true = [[1,0],[0,1]]
>>> y_pred = [[0.95,0.03],[0.3,0.8]]
>>> K.mean(math_ops.squared_difference(y_pred, y_true))
<tf.Tensor: shape=(), dtype=float32, numpy=0.03335>