Tensorflow深度学习-第四天

前向传播的最后一步就是完成误差的计算

L = g(f_{\theta} (x), y)

L = g(f_{\theta} (x), y)

f_{\theta}(.)代表了利用𝜃参数化的神经网络模型,𝑔(∙)称之为误差函数,用来描述当前网络的预测值𝑓 (𝒙)与真实标签𝒚之间的差距度量,比如常用的均方差误差函数。L称为网络的误差 𝜃(Error,或损失 Loss),一般为标量。我们希望通过在训练集𝔻train上面学习到一组参数𝜃使 得训练的误差L最小:

 

从另一个角度来理解神经网络,它完成的是特征的维度变换的功能,比如 4 层的 MNIST 手写数字图片识别的全连接网络,它依次完成了784 → 256 → 128 → 64 → 10的特 征降维过程。原始的特征通常具有较高的维度,包含了很多底层特征及无用信息,通过神 经网络的层层特征变换,将较高的维度降维到较低的维度,此时的特征一般包含了与任务 强相关的高层抽象特征信息,通过对这些特征进行简单的逻辑判定即可完成特定的任务, 如图片的分类。

网络的参数量是衡量网络规模的重要指标。那么怎么计算全连接层的参数量呢?考虑 权值矩阵𝑾,偏置向量𝒃,输入特征长度为𝑑in,输出特征长度为𝑑out的网络层,𝑾的参数 量为𝑑in ∙ 𝑑out,再加上偏置𝒃的参数,总参数量为𝑑in ∙ 𝑑out + 𝑑out。对于多层的全连接神经 网络,比如784 → 256 → 128 → 64 → 10,总参数量的计算表达式为:

256 ∙ 784 + 256 + 128 ∙ 256 + 128 + 64 ∙ 128 + 64 + 10 ∙ 64 + 10 = 242762

约 242K 个参数。

全连接层作为最基本的神经网络类型,对于后续的神经网络模型,例如卷积神经网络 和循环神经网络等,的研究具有十分重要的意义,通过对其他网络类型的学习,我们会发 现它们或多或少地都源自全连接层网络的思想。

我们来介绍神经网络中的常见激活函数,与阶跃函数和符号函数不同,这些函数都是平滑可导的,适合于梯度下降算法。

sigmod函数

relu函数

在 ReLU(REctified Linear Unit,修正线性单元)激活函数提出之前,Sigmoid 函数通常 是神经网络的激活函数首选。但是 Sigmoid 函数在输入值较大或较小时容易出现梯度值接 近于 0 的现象,称为梯度弥散现象。出现梯度弥散现象时,网络参数长时间得不到更新, 导致训练不收敛或停滞不动的现象发生,较深层次的网络模型中更容易出现梯度弥散现 象。2012 年提出的 8 层 AlexNet 模型采用了一种名叫 ReLU 的激活函数,使得网络层数达 到了 8 层,自此 ReLU 函数应用的越来越广泛。

 

ReLU 函数在𝑥 < 0时导数值恒为 0,也可能会造成梯度弥散现象,

为了克服这个问 题,LeakyReLU 函数被提出。

Tanh

在机器学习中, 一般会将图片的像素值归一化到[0,1]区间,如果直接使用输出层的值,像素的值范围会分 布在整个实数空间。为了让像素的值范围映射到[0,1]的有效实数空间,需要在输出层后添 加某个合适的激活函数𝜎,其中 Sigmoid 函数刚好具有此功能。

softmax

每个值代表了当前样本属于每个类别的概率,概率值之和为 1

TensorFlow 中提供了一个统 一的接口,将 Softmax 与交叉熵损失函数同时实现,同时也处理了数值不稳定的异常,一 般推荐使用这些接口函数,避免分开使用 Softmax 函数与交叉熵损失函数。函数式接口为tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False),其中 y_true 代表了 One-hot 编码后的真实标签,y_pred 表示网络的预测值,当 from_logits 设置为 True 时, y_pred 表示须为未经过 Softmax 函数的变量 z;当 from_logits 设置为 False 时,y_pred 表示 为经过 Softmax 函数的输出。为了数值计算稳定性,一般设置 from_logits 为 True,此时 tf.keras.losses.categorical_crossentropy 将在内部进行 Softmax 函数计算,所以不需要在模型 中显式调用 Softmax 函数.

z = tf.random.normal([2,10]) # 构造输出层的输出
y_onehot = tf.constant([1,3]) # 构造真实值
y_onehot = tf.one_hot(y_onehot, depth=10) # one-hot编码
# 输出层未使用 Softmax 函数,故 from_logits 设置为 True
# 这样 categorical_crossentropy 函数在计算损失函数前,会先内部调用 Softmax 函数 
loss = keras.losses.categorical_crossentropy(y_onehot,z,from_logits=False)
loss = tf.reduce_mean(loss) # 计算平均交叉熵损失

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值