各位同学好,今天和大家分享一下tensorflow2.0深度学习中的相关操作。内容有:

(1) 全连接层创建: tf.keras.Sequential(),tf.keras.layers.Dense()

(2) 输出方式: tf.sigmoid(),tf.softmax(),tf.tanh(),tf.nn.relu(),tf.nn.leaky_relu()


1. 全连接层

全连接层在整个网络卷积神经网络中起到特征提取器的作用。全连接层将学到的特征表示映射到样本的标记空间。

(1)在全连接层中创建一层: tf.keras.layers.Dense()

units: 正整数,输出空间的维数

activation=None: 激活函数,不指定则没有

use_bias=True: 布尔值,是否使用偏移向量

kernel_initializer='glorot_uniform': 核权重矩阵的初始值设定项

bias_initializer='zeros': 偏差向量的初始值设定项

kernel_regularizer=None: 正则化函数应用于核权矩阵

bias_regularizer=None: 应用于偏差向量的正则化函数

kernel_constraint=None: 对权重矩阵约束

bias_constraint=None: 对偏置向量约束

(2)堆层构建全连接层: tf.keras.Sequential([layer1,layer2,layer3])

通过组合层来构建模型,直接堆叠各个层


1.1 创建单个连接层

首先构造一个shape为[4,478]的随机正态分布,构造一个连接层tf.keras.layers.Dense(),输出512个特征,shape为[4,512]。将输入层放入连接层自动调用build()函数创建权重w和偏置b,将计算结果返回给out。

# 创建单个连接层
import tensorflow as tf
# 构建输入
x = tf.random.normal([4,478])
# 输入的shape不需要指定,可以自动的根据输入的特征生成对应的权值
net = tf.keras.layers.Dense(512)
# 输出结果
out = net(x)
out.shape  # 输出结果的shape[4,512]
net.kernel.shape # 权值W的形状,W的shape为[478,512]
net.bias.shape # 偏置b的形状,X的shape为[4,478]
# 调用net函数时,自动判断,如果当前没有创建w和b,自动调用build函数

1.2 创建多个连接层

使用tf.keras.Sequential()堆叠构建全连接层;使用tf.keras.layers.Dense()创建每一个全连接层;使用build()构建输入层。网络结构为[b,10]=>[b,16]=>[b,32]=>[b,8];通过summary()查看整体网络架构。通过model.trainable_variables查看网络的所有的权重和偏置。

#(4)创建多个全连接层
# 将所有连接层组成一个列表放入
from tensorflow import keras
# 构建全连接层
model = keras.Sequential([keras.layers.Dense(16, activation='relu'), #w的shape为[10,16],b的shape为[16],共10*16+16=176个参数  keras.layers.Dense(32, activation='relu'), #w的shape为[16,32],b的shape为[32]keras.layers.Dense(8)])  #w的shape为[32,8],b的shape为[8]model.build(input_shape=[None,10]) #输入层10个特征
model.summary()  # 查看网络结构
# 查看网络所有的权重w和偏置b
for p in model.trainable_variables:print(p.name,p.shape)

整体网络构架如下:对于第一层,w的shape为[10,16],b的shape为[16],共10*16+16=176个参数 ,下面几层的参数个数同理

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #
=================================================================dense (Dense)               (None, 16)                176       dense_1 (Dense)             (None, 32)                544       dense_2 (Dense)             (None, 8)                 264       =================================================================
Total params: 984
Trainable params: 984
Non-trainable params: 0
_________________________________________________________________

2. 输出映射方式

2.1 sigmoid函数

sigmoid函数: tf.sigmoid(tensor)

输出结果的范围映射到(0,1)之间,计算公式:

sigmoid只能保证单个数值的范围在0-1之间

a = tf.linspace(-6,6,10) #-6到6的长度为10的向量
# sigmoid函数将其映射到0-1
tf.sigmoid(a)
# 输入数据:array([-6.        , -4.66666667, -3.33333333, -2.        , -0.66666667,0.66666667,  2.        ,  3.33333333,  4.66666667,  6.
# 输出结果:array([0.00247262, 0.00931596, 0.0344452 , 0.11920292, 0.33924363,0.66075637, 0.88079708, 0.9655548 , 0.99068404, 0.99752738])

2.2 softmax函数

对于分类问题,需要每一个概率在0-1之间,且总的概率和为1

softmax函数:tf.softmax(logits, axis)

logits:一个非空的Tensor。必须是下列类型之一:half, float32,float64。

axis:将在其上执行维度softmax。默认值为-1,表示最后一个维度。

公式为:

一般将没有加激活函数的称为Logits,加了softmax后称为Probabilities,经过softmax后,有把最大值放大的过程,相当于把强的变得更强,把弱的变得更弱。

logits = tf.random.uniform([1,10],minval=-2,maxval=2)
# 使用softmax
prob = tf.nn.softmax(logits,axis=1) #对整个列表的值求softmax
# 求和
tf.reduce_sum(prob,axis=1)# logits:array([[-0.80400324,  1.1189251 ,  1.7390656 ,  0.8317995 , -1.1970901 ,-0.48806524, -1.1161256 , -0.35890388,  0.765254  , -1.8393846 ]],dtype=float32)>
# prob:array([[0.02841684, 0.19439851, 0.3614236 , 0.14588003, 0.01918051,0.03897498, 0.02079806, 0.0443486 , 0.13648833, 0.01009056]],dtype=float32)>
# sum:<tf.Tensor: shape=(1,), dtype=float32, numpy=array([1.], dtype=float32)>

2.3 tanh函数

tanh是通过sigmoid函数放大平移得到,输出结果在(-1,1)之间

tanh函数: tf.tanh(tensor)

a = tf.linspace(-2, 2, 5)  # -2到2的长度为5的向量
# 结果映射到(-1,1)
tf.tanh(a)
# 输入:<tf.Tensor: shape=(5,), dtype=float64, numpy=array([-2., -1.,  0.,  1.,  2.])>
# 输出:<tf.Tensor: shape=(5,), dtype=float64, numpy=array([-0.96402758, -0.76159416,  0.        ,  0.76159416,  0.96402758])>

2.4 relu函数

将输入小于0的值都变成0,大于0的值保持不变。

relu激活函数:tf.nn.relu(features)

公式为: 

# relu函数,x小于0,梯度0,x大于0梯度1
a = tf.linspace(-1,1,10) # -1到1,长度为10的向量
tf.nn.relu(a)# 输入为:array([-1.        , -0.77777778, -0.55555556, -0.33333333, -0.11111111,        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])>
# 输出为:array([0.        , 0.        , 0.        , 0.        , 0.        ,       0.11111111, 0.33333333, 0.55555556, 0.77777778, 1.        ])>

2.5 leaky_relu函数

非饱和激活函数: tf.nn.leaky_relu( features, alpha=0.2 )

features: tensor类型,表示预激活值,必须是下列类型之一:float16,float32,float64,int32,int64.

alpha: x <0时激活函数的斜率.

由于relu函数对于小于0的值,这个神经元的梯度永远都会是0,在实际操作中,如果数据很大,很可能网络中较多的神经元都死了。这时需要leaky_relu函数:

公式:y = max(0, x) + leak*min(0,x)

leak是一个很小的常数,这样保留了一些负轴的值,使得负轴的信息不会全部丢失

a = tf.linspace(-1,1,10)
# tf.nn.leaky_rulu() ,x小于0y也小于0但接近0
tf.nn.leaky_relu(a)# 输入:array([-1.        , -0.77777778, -0.55555556, -0.33333333, -0.11111111,        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])>
# 输出:array([-0.2       , -0.15555556, -0.11111111, -0.06666667, -0.02222222,        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])>

【深度学习】(3) 全连接层、激活函数相关推荐

  1. 【深度学习】全连接层

    4.5 全连接层 全连接层是一个列向量(单个样本).通常用于深度神经网络的后面几层,用于图像分类任务. 全连接层,是每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来.由于其全相连的特 ...

  2. 【深度学习】全连接层or卷积层

    对于图像处理任务而言,在经过一连串的卷积.池化操作后,最后要接一个全连接层来对提取到的特征进行分类或者回归. 一般前面带卷积操作的被称之为卷积基,后面跟一层或多层全连接层. 卷积神经网络中流动的是3维 ...

  3. 【深度学习】全连接层 (Full Connection,FC)

    Introduce 全连接层也是一种卷积层. 它的参数基本和卷积层的参数一样,只是它的卷积核大小和原数据大小一致. 起到将学到的"分布式特征表示"映射到样本标记空间的作用. 用 g ...

  4. 【深度学习】全连接层的作用

    原文链接 https://www.zhihu.com/question/41037974/answer/150522307 全连接层(fully connected layers,FC)在整个卷积神经 ...

  5. 【计算机视觉与深度学习】全连接神经网络(二)

    计算机视觉与深度学习系列博客传送门 [计算机视觉与深度学习]线性分类器(一) [计算机视觉与深度学习]线性分类器(二) [计算机视觉与深度学习]全连接神经网络(一) 目录 激活函数再探讨 梯度下降算法 ...

  6. 深度学习原理-----全连接神经网络

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  7. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  8. 【简易笔记】计算机视觉与深度学习(全连接神经网络、卷积) EP2

    本篇承接上文:计算机视觉与深度学习 EP1 本篇主要内容: 全连接神经网络(P4 - P6) 卷积与卷积神经网络(P7 - P8) 经典网络分析(P9 - P10) 可视化(P12 - P13) 主要 ...

  9. 【计算机视觉与深度学习】全连接神经网络(一)

    计算机视觉与深度学习系列博客传送门 [计算机视觉与深度学习]线性分类器(一) [计算机视觉与深度学习]线性分类器(二) 目录 从线性分类器到全连接神经网络 全连接神经网络的权值 全连接神经网络与线性不 ...

  10. 深度学习初级阶段——全连接神经网络(MLP、FNN)

    在前面的数学原理篇中,已经提到了各种深度学习的数学知识基本框架,那么从这篇文章开始,我将和大家一起走进深度学习的大门(部分图片和描述取自其他文章). 目录 一.首先我们需要知道什么是深度学习? 二.了 ...

最新文章

  1. ps怎么把一个颜色替换成另一个颜色_图标设计,用PS制作一款小清新的拟物时钟...
  2. 其实你做的大部分工作都是浪费
  3. ElasticSearch(3)-安装kibana
  4. 【Ubuntu入门到精通系列讲解】常用其他命令(find ln tar apt)等速查
  5. ASP.NET 快乐建站系列 -- 1. 十五分钟建立精美网站
  6. 数据结构:单向环形链表
  7. 技术 KPI 的量化
  8. AutoLISP 绘制表情图案
  9. 如何简单形象又有趣地讲解神经网络是什么?
  10. P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】
  11. WPF 正確理解ContentPresenter
  12. Android JNI层确保只有一个进程的一个实现
  13. JMeter如何和Charles进行接口测试
  14. 游戏开发之运算符重载(C++基础)
  15. NFT数字藏品交易平台免费版源码-视觉猿CMS
  16. 往事如烟随风,切如梦初醒
  17. A按键控制LED状态
  18. android基带版本,Android - 基带版本为未知时自动隐藏
  19. 免费福利 Unity3D 项目资源分享链接(消消乐、斗地主、AR等)
  20. 下面哪个不是python常用的开发工具_Python程序员常用的IDE和其它开发工具

热门文章

  1. Ubuntu 系统 卸载OpenJDK 8
  2. Android SDK 路径修改
  3. Kotlin 创建对象
  4. 小程序navigateBack,子页面传值给父页面
  5. 常用样式积累-scss
  6. 洛谷P4316 绿豆蛙的归宿(期望)
  7. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园
  8. Go 学习笔记(21)— 标准库 os 操作文件(新建、打开、写入、读取、删除、关闭文件)
  9. Android studio第一次使用配置(三)gradle项目构建
  10. 20162303 2016-2017-2 《程序设计与数据结构》第六周学习总结