# TensorFlow2.0（8）：误差计算——损失函数总结

TensorFlow2.0（6）：利用data模块进行数据预处理

## 1 均方差损失函数：MSE

```import tensorflow as tf
y = tf.random.uniform((5,),maxval=5,dtype=tf.int32)  # 假设这是真实值
print(y)

y = tf.one_hot(y,depth=5)  # 转为热独编码
print(y)```
```tf.Tensor([2 4 4 0 2], shape=(5,), dtype=int32)
tf.Tensor(
[[0. 0. 1. 0. 0.]
[0. 0. 0. 0. 1.]
[0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0.]], shape=(5, 5), dtype=float32)
```
`y`
```<tf.Tensor: id=7, shape=(5, 5), dtype=float32, numpy=
array([[0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0.]], dtype=float32)>
```
```pred = tf.random.uniform((5,),maxval=5,dtype=tf.int32)  # 假设这是预测值
pred = tf.one_hot(pred,depth=5)  # 转为热独编码
print(pred)```
```tf.Tensor(
[[0. 1. 0. 0. 0.]
[0. 0. 0. 1. 0.]
[1. 0. 0. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]], shape=(5, 5), dtype=float32)
```
```loss1 = tf.reduce_mean(tf.square(y-pred))
loss1```
```<tf.Tensor: id=19, shape=(), dtype=float32, numpy=0.4>
```

```loss_mse_1 = tf.losses.MSE(y,pred)
loss_mse_1```
```<tf.Tensor: id=22, shape=(5,), dtype=float32, numpy=array([0.4, 0.4, 0.4, 0.4, 0.4], dtype=float32)>
```
```loss_mse_2 = tf.reduce_mean(loss_mse_1)
loss_mse_2```
```<tf.Tensor: id=24, shape=(), dtype=float32, numpy=0.4>
```

## 2 交叉熵损失函数

`tf.losses.categorical_crossentropy([0,1,0,0,0],[0.1, 0.7, 0.05, 0.05, 0.1])`
```<tf.Tensor: id=41, shape=(), dtype=float32, numpy=0.35667497>
```
`tf.losses.categorical_crossentropy([0,1,0,0,0],[0, 0.6, 0.2, 0.1, 0.1])`
```<tf.Tensor: id=58, shape=(), dtype=float32, numpy=0.5108256>
```

```x = tf.random.normal([1,784])
w = tf.random.normal([784,2])
b = tf.zeros([2])```
```logits = x@w + b  # 最后一层没有激活函数的层称为logits层
logits```
```<tf.Tensor: id=75, shape=(1, 2), dtype=float32, numpy=array([[ 5.236802, 18.843138]], dtype=float32)>
```
```prob = tf.math.softmax(logits, axis=1)  # 转换为概率的形式
prob```
```<tf.Tensor: id=77, shape=(1, 2), dtype=float32, numpy=array([[1.2326591e-06, 9.9999881e-01]], dtype=float32)>
```
`tf.losses.categorical_crossentropy([0,1],logits,from_logits=True)  # 通过logits层直接计算交叉熵`
```<tf.Tensor: id=112, shape=(1,), dtype=float32, numpy=array([1.1920922e-06], dtype=float32)>
```
`tf.losses.categorical_crossentropy([0,1],prob)  # 通过转换后的概率计算交叉熵`
```<tf.Tensor: id=128, shape=(1,), dtype=float32, numpy=array([1.1920936e-06], dtype=float32)>
```

https://www.cnblogs.com/chenhuabin

https://github.com/ChenHuabin321/tensorflow2_tutorials

0 条评论

• ### 【实验楼-Python 科学计算】SciPy - 科学计算库（下）

使用 eigvals 计算矩阵的特征值，使用 eig 同时计算矩阵的特征值与特征向量：

• ### Python数据分析之scikit-learn与数据预处理​

预处理操作是机器学习整个周期中必不可少的一个过程，也是最能快速改善模型性能的一个过程，往往稍微转换一下特征属性的形态，就能得到性能的极大提升。当然，数据预处理绝...

• ### 要强大的“黑匣子”，还是“可解释”的机器学习？| 清华AI Time激辩

要不要用准确性换可解释性？这可能是许多资源有限的创业公司，在技术研发中面临的重要问题，同时也是机器学习可解释性研究中的重要议题。

• ### python读取文件——python读取和保存mat文件

首先我们谈谈MarkDown编辑器，我感觉些倒是挺方便的，因为用惯了LaTeX，对于MarkDown还是比较容易上手的，但是我发现，MarkDown中有...

• ### 用Python开始机器学习：文本特征抽取与向量化

假设我们刚看完诺兰的大片《星际穿越》，设想如何让机器来自动分析各位观众对电影的评价到底是“赞”（positive）还是“踩”（negative）呢？ 这类问题就...

• ### python机器学习速成|1|数据导入

主要任务： ①完成常见的数据导入操作，包括数据导入，缺失值填充 ②完成常见的机器学习数据准备，包括特征二值化和训练集测试集的划分等

• ### 投稿 | 图卷积网络 GCN: Graph Convolutional Networks

上面左图是2D卷积神经网络，其输入是4行4列的矩阵，通过卷积核逐步移动实现对整个输入的卷积操作；而右图输入是图网络，其结构和连接是不规则的，无法像卷积神经网络那...

• ### python读取文件——python读取和保存mat文件

首先我们谈谈MarkDown编辑器，我感觉些倒是挺方便的，因为用惯了LaTeX，对于MarkDown还是比较容易上手的，但是我发现，MarkDown中有...