1.损失函数
神经网络模型的效果及优化的目标是通过损失函数来定义的。回归和分类是监督学习中的两个大类。
(1)均方误差

例子:
预测酸奶日销量y,x1、x2是影响日销量的因素。建模前,应预先采集的数据有:每日x1、x2和销量y_(即已知答案,最佳情况:产量=销量)
拟造数据集X,Y_: y_ = x1 + x2 噪声:-0.05 ~ +0.05 拟合可以预测销量的函数
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "yanjungan"
import tensorflow as tf
import numpy as np
SEED = 23455
rdm = np.random.RandomState(seed=SEED) # 生成(0, 1)之间的随机数
# 生成32行2列(0, 1)
x = rdm.rand(32, 2)
# 生成噪声[0,1)/10=[0,0.1); [0,0.1)-0.05=[-0.05,0.05)
y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x]
# 强制转换x的数据类型
x = tf.cast(x, dtype=tf.float32)
w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1))
epoch = 15000
lr = 0.002
for epoch in range(15000):
with tf.GradientTape() as tape:
y = tf.matmul(x, w1)
loss_mse = tf.reduce_mean(tf.square(y_ - y))
# 生成导数,梯度
grads = tape.gradient(loss_mse, w1)
# 更新w1, w1 = w1-lr*grads
w1.assign_sub(lr*grads)
if epoch % 500 == 0:
print('After %d training steps, w1 is '% (epoch))
print(w1.numpy(), "
")
print("Final w1 is:", w1.numpy())

最终w1的两个参数都是很接近1的,即,y=1.00*x1+1.00*x2,这一结果和我们制造数据集的公式y=1*x1+1*x2一致,说明预测酸奶的日销量拟合公式正确
(2)交叉熵损失函数

通过交叉熵的值,可以判断哪个预测的值(y)与实际值(y_)更接近,交叉熵越小,预测越准
2.softmax与交叉熵结合
我们在执行分类问题时,通常先用softmax函数让输出结果符合概率分布,再求交叉熵损失函数
tensorflow给出了可同时计算概率和交叉熵的函数

即输出先过softmax函数,再计算y与y_的交叉熵损失函数
