热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习(20)神经网络与全连接层三:全连接层

深度学习(20)神经网络与全连接层三:全连接层1.单层2.三层3.多层4.HerecomesDeepLearning!5.WhyDeepLearning


深度学习(20)神经网络与全连接层三: 全连接层

  • 1. 单层
  • 2. 三层
  • 3. 多层
  • 4. Here comes Deep Learning!
  • 5. Why Deep Learning?
  • 6. Heroes
  • 7. Fully connected layer(全连接层)
  • 8. net.build()
  • 9. 网络中的维度设置出错会导致报错
  • 10. Multi-Layers——keras.Sequential()
  • 11. 全连接层实战
  • 12. Next

Outline


  • Matmul
  • Neural Network
  • Deep Learning
  • Multi-Layer

Recap


  • out=f(X@W+b)out=f(X@W+b)out=f(X@W+b)
    →\to
  • out=relu(X@W+b)out=relu(X@W+b)out=relu(X@W+b)

1. 单层


  • X@W+bX@W+bX@W+b
    • h=relu(X@W+b)h=relu(X@W+b)h=relu(X@W+b)
    • [h00h10h01h11]=relu([x00x10x20x10x11x12]@[w00w01w10w11w20w21]+[b0b1])\begin{bmatrix}h_0^0&h_1^0\\h_0^1&h_1^1\end{bmatrix}=relu(\begin{bmatrix}x_0^0&x_1^0&x_2^0\\x_1^0&x_1^1&x_1^2\end{bmatrix}@\begin{bmatrix}w_{00}&w_{01}\\w_{10}&w_{11}\\w_{20}&w_{21}\end{bmatrix}+\begin{bmatrix}b_0&b_1\end{bmatrix})[h00h01h10h11]=relu([x00x10x10x11x20x12]@w00w10w20w01w11w21+[b0b1])
      在这里插入图片描述

2. 三层


  • h0=relu(X@W1+b1)h_0=relu(X@W_1+b_1)h0=relu(X@W1+b1)
  • h1=relu(h0@W2+b2)h_1=relu(h_0@W_2+b_2)h1=relu(h0@W2+b2)
  • out=relu(h1@W3+b3)out=relu(h_1@W_3+b_3)out=relu(h1@W3+b3)
    在这里插入图片描述

3. 多层


  • Input
  • Hidden
  • Output
    在这里插入图片描述

4. Here comes Deep Learning!

(1) Neural Network in the 1980s


  • 3∼5layers3\sim5\ layers35 layers
    在这里插入图片描述

(2) Deep Learning now


  • n≈1200layersn≈1200\ layersn1200 layers
    在这里插入图片描述

5. Why Deep Learning?


    • 486 PC with DSP32C
      • 20Mflops, 4MB RAM
        在这里插入图片描述
    • Telsa V100
      • 32GB HBM2, 100Tflops
        在这里插入图片描述

6. Heroes


  • BigDATA
  • ReLU
  • Dropout
  • BatchNorm
  • ResNet
  • Xavier Initialization
  • Caffe/TensorFlow/PyTorch

  • 在这里插入图片描述

7. Fully connected layer(全连接层)

在这里插入图片描述
在这里插入图片描述

(1) x = tf.random.normal([4, 784]): 创建一个维度为[4, 784]的Tensor;
(2) net = tf.keras.layers.Dense(512): 创建一层神经网络,其输出维度为512;
(3) tf.keras.layers.Dense()在运行时会自动根据输入的shape来生成权值,即w和b;
(4) out.shape: 输出out的维度为[4, 512];
(5) net.kernal.shape: 为自动生成的权值w,其shape为[784, 512];
(6) net.bias.shape: 为自动生成的权值(偏置项)b,其shape为[512];


8. net.build()

在这里插入图片描述
(1) net.build(input_shape=(None, 4)): 可以通过调用net.build()函数创建权重wwwbbb,其中4为下一层的维度;
(2) net.build(input_shape=(None, 20)): 这里可以看出可以通过多次调用net.build()函数来计算权重wwwbbb的值;
注: 在第一次创建神经网络的时候,没有wwwbbb,这时系统就会自动调用net.build()函数来创建权重wwwbbb;


9. 网络中的维度设置出错会导致报错

在这里插入图片描述

(1) 如上图所示,net.build(input_shape=(None, 20))表示建立的网络的维度为20; out=net(tf.random.randn((4, 12)))表示输入到这层神经网络中的数据的维度是12; 那么计算时就会报错;
(2) out=net(tf.random.randn((4, 20))): 将输入到这层神经网络中的数据的维度改为20,最终out.shape=[4, 10];


10. Multi-Layers——keras.Sequential()

多层神经网络,只需要调用容器——keras.Sequential()即可。


    • keras.Sequential([layer1, layer2, layer3])
      在这里插入图片描述
    • Sequential
      在这里插入图片描述

(1) x = random.normal([2, 3]): 创建一个维度为[2, 3]的Tensor;
(2) model = keras.Sequential([keras.layers.Dense(2, activation=‘relu’), keras.layers.Dense(2, activation=‘relu’), keras.layers.Dense(2)]): 共设置3层全连接层:
[3]→[2]→[2]→[2][3]→[2]→[2]→[2][3][2][2][2]
(3) model.build(input_shape=[None, 3]): 给定一个维度为3的输入;
(4) model.summary(): 相当于print(model),方便查看网络结构的函数;
(5) for p in model.trainable_variables: 所有权重参数都被称为“可训练的变量”,即trainable_variables,在这个网络结构中,就是[w1,b1,w2,b2,w3,b3][w_1,b_1,w_2,b_2,w_3,b_3][w1,b1,w2,b2,w3,b3];
(6) print(p.name, p.shape): 打印这些参数的名字和其维度;


11. 全连接层实战

import tensorflow as tf
from tensorflow import kerasx = tf.random.normal([2, 3])model = keras.Sequential([keras.layers.Dense(2, activation='relu'),keras.layers.Dense(2, activation='relu'),keras.layers.Dense(2)
])
model.build(input_shape=[None, 4])
model.summary()for p in model.trainable_variables:print(p.name, p.shape)

运行结果如下:
在这里插入图片描述

(1) Param为参数量,第一层有2×3+2=82×3+2=82×3+2=8个; 第二层有2×2+2=62×2+2=62×2+2=6个; 第三层有2×2+2=62×2+2=62×2+2=6个;
(2) dense_n/kernel: 第n层的www的值;
dense_n/bias: 第n层的bbb的值;


12. Next


  • 神经网络层与训练方法
  • 图片识别
  • 文本理解
  • 艺术创作
  • 自动决策

  • 在这里插入图片描述

参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
[2] https://www.youtube.com/watch?v=FwFduRA_L6Q
[3] https://capacitybc.com/mini-series-part-3-the-hero1
[4] https://www.facebook.com/deepdreamgenerator/photos/a.892441237472223/1449674838415524/?type=1&theater
[5] https://study.163.com/provider/480000001847407/index.htm?share=2&shareld=480000001847407


推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 在《Python编程基础》课程中,我们将深入探讨Python中的循环结构。通过详细解析for循环和while循环的语法与应用场景,帮助初学者掌握循环控制语句的核心概念和实际应用技巧。此外,还将介绍如何利用循环结构解决复杂问题,提高编程效率和代码可读性。 ... [详细]
  • 神经网络在二分类任务中输出层应配置多少神经元及选择何种激活函数?处理MNIST数据集时输出层神经元数量与激活函数如何确定?神经网络预测房价时输出层神经元数量和激活函数的选择策略?
    在神经网络进行二分类任务时,输出层应配置多少个神经元以及选择哪种激活函数是一个关键问题。对于MNIST数据集的处理,输出层的神经元数量和激活函数的选择策略是什么?而在预测房价的任务中,输出层的神经元数量和激活函数又该如何确定?本文将详细探讨这些选择背后的原理和实践建议,以帮助读者更好地理解和应用神经网络模型。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • TensorFlow Lite在移动设备上的部署实践与优化笔记
    近期在探索如何将服务器端的模型迁移到移动设备上,并记录了一些关键问题和解决方案。本文假设读者具备以下基础知识:了解TensorFlow的计算图(Graph)、图定义(GraphDef)和元图定义(MetaGraphDef)。此外,文中还详细介绍了模型转换、性能优化和资源管理等方面的实践经验,为开发者提供有价值的参考。 ... [详细]
  • 在Windows命令行中,通过Conda工具可以高效地管理和操作虚拟环境。具体步骤包括:1. 列出现有虚拟环境:`conda env list`;2. 创建新虚拟环境:`conda create --name 环境名`;3. 删除虚拟环境:`conda env remove --name 环境名`。这些命令不仅简化了环境管理流程,还提高了开发效率。此外,Conda还支持环境文件导出和导入,方便在不同机器间迁移配置。 ... [详细]
author-avatar
mobiledu2502936307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有