IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Tensorflow:介绍常见激活函数和池化,并用Tensorflow搭建前向神经网络 -> 正文阅读

[人工智能]Tensorflow:介绍常见激活函数和池化,并用Tensorflow搭建前向神经网络

Tensorflow:介绍常见激活函数和池化,并用Tensorflow搭建前向神经网络

一、常见激活函数和池化

1 激活函数

? 激活函数通常用于卷积层和全连接层的末端,为神经网络提供非线性变化。

? 1.1 sigmoid

? S形曲线,早期用于卷积层,通常用于逻辑回归任务的最后一层输出
在这里插入图片描述
在这里插入图片描述
? tensorflow对应api:tf.nn.sigmoid()

?分类中通常和损失函数在这里插入图片描述
一起使用

? 1.2 relu

? 线性整流函数,通常用于卷积层和全连接的前几层

? relu = max(0,x)

在这里插入图片描述

? tensorflow对应api:tf.nn.relu()

? 1.3 softmax

? 多分类激活,通常用于多分类任务最后一层输出

? 在这里插入图片描述

? 不好画图,但是所有求和=1

? 分类中通常与损失函数-log(f)一起使用

? tensorflow对应的api:tf.nn.softmax()

? 1.4 tanh
图片来源于知乎,侵删

图片来源于知乎

? tensorflow对应的api,tf.nn.tanh()

? 2 池化

? 池化的作用:特征采样,降维度

? maxpool,对应的api为tf.nn.maxpool,通常size为(3,3)或者(5,5),stride为2

二、用Tensorflow搭建前向神经网络

要求如下:

? 1 练习搭建前向神经网络:

? 1.1 np构成(4,16,16,3)的矩阵,(0-1)随机,模拟4张16*16的图片。

? 2.1 连续两次:(用3*3的卷积核输出64个特征图,用relu做激活)

? 3.1 用maxpool池化,3*3,s=2

? 4.1 连续两次:(用3*3的卷积核输出128个特征图,用relu做激活)

? 5.1 用maxpool池化, 3*3,s=2

? 6.1 拉伸后做一次全连接,输出1024个神经元,用relu激活

? 6.2 再做一次全连接,输出1个神经元,用sigmoid激活

? 6.3 session.run, 并打印3.1, 5.1, 6.2的结果

? 2 在1的基础上,创建一个(4,1)的向量,作为y,并实现以下损失函数

在这里插入图片描述

求平均输出一个标量(数字)。

代码如下:
import tensorflow as tf
import numpy as np

#1.1 np构成(4,16,16,3)nhwc 的矩阵.(0-1)随机,模拟4张16*16的图片。
inputs = np.random.randn(4,16,16,3)#创建4*16*16*3的随机张量

#2.1 连续两次:(用3*3的卷积核输出64个特征图,用relu做激活)
#第一次
conv1 = tf.layers.conv2d(inputs, 64, (3, 3),padding = "same")#卷积操作
relu_output1 = tf.nn.relu(conv1)#relu激活
#第二次
conv2 = tf.layers.conv2d(relu_output1, 64, (3, 3),padding = "same")#卷积操作
relu_output2 = tf.nn.relu(conv2)#relu激活
#3.1 用maxpool池化,3*3 s=2
pool_output1 = tf.nn.max_pool2d(relu_output2, (3, 3), 2, padding = "SAME")#参数依次是输入,窗口大小,步长

#4.1 连续两次:(用3*3的卷积核输出128个特征图,用relu做激活)
#第一次
conv3 = tf.layers.conv2d(pool_output1, 128, (3, 3),padding = "same")#卷积操作
relu_output3 = tf.nn.relu(conv3)#relu激活
#第二次
conv4 = tf.layers.conv2d(relu_output3, 128, (3, 3),padding = "same")#卷积操作
relu_output4 = tf.nn.relu(conv4)#relu激活
#5.1 用maxpool池化, 3*3 s=2
pool_output2 = tf.nn.max_pool(relu_output4, (3, 3), 2, padding = "SAME")

#6.1 拉伸后做一次全连接,输出1024个神经元,用relu激活
flatten = tf.layers.flatten(pool_output2)#输出矩阵拉伸运算
dense1 = tf.layers.dense(flatten, 1024)#设置神经元个数为1024
relu_output5 = tf.nn.relu(dense1)#relu激活

#6.2 再做一次全连接,输出1个神经元,用sigmoid激活
dense2 = tf.layers.dense(relu_output5, 1)#设置神经元个数为1
sigmoid_output = tf.nn.sigmoid(dense2)#sigmoid激活

#在1的基础上,创建一个(4,1)的向量,作为y,并实现以下损失函数,求平均输出一个标量(数字)。
y = np.random.randn(4, 1)#创建(4,1)向量y
#定义损失函数并求均值,返回结果为标量
def cost(y_pre, y):
    return tf.reduce_mean(-y*t.log(y_pre)-(1-y)*tf.log(1-y_pre))
#结果标量
mean = cost(sigmoid_output, y)

#6.3 session.run, 并打印3.1, 5.1, 6.2的结果
with tf.compat.v1.Session() as sess:
    sess.run(tf.global_variables_initializer())
    [pool_output1, pool_output2, sigmoid_output,mean] = sess.run([pool_output1, pool_output2, sigmoid_output,mean])
    print("第一次池化结果形状:", pool_output1.shape)
    print("第一次池化结果:\n",  pool_output1)
    print("第二次池化结果形状:", pool_output2.shape)
    print("第二次池化结果:\n",  pool_output2)
    print("两次全连接后结果形状:", sigmoid_output.shape)
    print("两次全连接后结果:\n", sigmoid_output)
    print("平均损失值为:",mean)
理解各个步骤中的形状变化:

第一次卷积:由于原输入形状为(4,16,16,3),经过第一次有64个卷积核且padding="same"的卷积操作后,一共会得到64个feature map,且每个feature map的形状不变(上节讲过),故输出形状为(4,16,16,64);再通过relu函数激活后,输出形状仍为(4,16,16,64)。

第二次卷积:同上,输出形状仍为(4,16,16,64)。

第一次池化:在第一次池化操作时,由于窗口大小设置为3*3,且步长为2,所以池化操作后的每个feature map的形状要比输入时的形状缩小一半,故第一次池化结果形状为(4,8,8,64),见下图。

在这里插入图片描述

第三次卷积:输入形状为(4,8,8,64),此时经过有128个卷积核且padding="same"的卷积操作后,一共会得到128个feature map,且每个feature map的形状不变,故输出形状为(4,8,8,128);再通过relu函数激活后,输出形状仍为(4,8,8,128)。

第四次卷积:同上,输出形状仍为(4,8,8,128)。

第二次池化:在第二次池化操作时,同第一次池化,由于窗口大小设置为3*3,且步长为2,所以池化操作后的每个feature map的形状要比输入时的形状缩小一半,故第二次池化结果形状为(4,4,4,128),见下图。

在这里插入图片描述

第一次全连接:该全连接的输入形状为(4,4,4,128),设置神经元个数为1024,故经过第一次全连接后的形状为(4,1024),再通过relu函数激活后,输出形状仍为(4,1024)。

第二次全连接:该全连接的输入形状为(4,1024),设置神经元个数为1,故故经过第二次全连接后的形状为(4,1),再通过sigmoid函数激活后,输出形状仍为(4,1)。见下图:

在这里插入图片描述

自行定义损失函数cost并求均值函数,参数为预测值(神经网络最后输出的sigmoid_output)和真实值(随机向量y),其计算结果如下:

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 22:43:54  更:2021-07-30 22:44:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:29:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码