深度学习知识与心得

目录

深度学习简介

传统机器学习

深度学习发展

感知机

前馈神经网络

前馈神经网络(BP网络)

深度学习框架讲解

深度学习框架

TensorFlow

一个简单的线性函数拟合过程

卷积神经网络CNN(计算机视觉)

自然语言处理NLP

Word Embedding

词向量

词向量学习方法:LSA、PLSA

词向量训练

词向量应用

循环神经网络RNN(语义理解)

基本原理

基本应用

RNN的缺陷

LSTM (特殊的RNN)

练习_聊天机器人实战


深度学习(Deep Learning,简称DL)是机器学习(Machine Learning,简称ML)领域中的一个重要研究方向。它被引入机器学习领域,目的是使机器能够更接近于实现人工智能(Artificial Intelligence,简称AI)的原始目标。深度学习通过学习样本数据的内在规律和表示层次,实现对诸如文字、图像和声音等数据的解释,并提升机器的分析学习能力。

深度学习的核心原理主要包括神经网络、反向传播算法、激活函数、损失函数和优化算法等。神经网络是深度学习的基本结构,它由输入层、隐藏层和输出层组成,通过权重和偏置连接各层,逐层传递信息并进行处理。反向传播算法则用于在训练过程中更新网络参数,优化网络性能。激活函数和损失函数则分别用于增加网络的非线性能力和衡量网络输出与真实标签之间的差异。优化算法则用于在训练过程中最小化损失函数,更新网络参数。

深度学习在众多领域都有广泛的应用,如计算机视觉及图像识别、自然语言处理、语音识别及生成、推荐系统、游戏开发、医学影像识别、金融风控、智能制造、购物领域以及基因组学等。这些应用不仅展示了深度学习的强大能力,也推动了相关领域的进步和发展。

在未来,深度学习将继续朝着跨学科融合、多模态融合、自动化模型设计、持续优化算法、边缘计算的应用以及可解释性和可靠性等方向发展。这些发展将进一步推动深度学习技术的进步,拓宽其应用领域,并提升其在各种复杂任务中的性能。

需要注意的是,深度学习虽然取得了显著的成果,但仍然存在一些挑战和限制,如数据需求量大、模型复杂度高、计算资源消耗大等问题。因此,在实际应用中,需要根据具体任务和场景来选择合适的深度学习方法和模型,并进行合理的优化和调整。

深度学习简介

传统机器学习

深度学习发展

感知机

非线性问题解决不能用线性变换

前馈神经网络

前馈神经网络(BP网络)

可以通过多调几次参数和多跑几次模型

NLP是自然语言处理(Natural Language Processing)的缩写,是人工智能和语言学领域的交叉学科。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分

深度学习框架讲解

深度学习框架

TensorFlow

一个简单的线性函数拟合过程

下面是代码的解释:

  1. 导入TensorFlow库。
import tensorflow as tf
  1. 创建两个tf.Variable对象xy,并分别初始化为[1, 2, 3][4, 5, 6]
x = tf.Variable([1, 2, 3], dtype=tf.float32)
y = tf.Variable([4, 5, 6], dtype=tf.float32)
  1. 计算xy的逐元素乘积,并求和得到z
z = tf.reduce_sum(x * y)
  1. 使用tf.Session来初始化变量并计算z的值。
with tf.Session() as sess:
sess.run(tf.global_variables_initializer()) # 初始化所有全局变量
z_value = sess.run(z) # 执行计算图,得到z的值
print(z_value) # 打印结果

with tf.Session() as sess:的上下文中,首先使用sess.run(tf.global_variables_initializer())来初始化所有全局变量(即xy)。然后,使用sess.run(z)来执行计算图并获取z的值。最后,将z的值打印出来。

运行这段代码将输出:

32

这是因为(1*4) + (2*5) + (3*6) = 4 + 10 + 18 = 32

卷积神经网络CNN(计算机视觉)

卷积神经网络(Convolutional Neural Networks,简称CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习领域的代表算法之一。卷积神经网络具有表征学习的能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络”。

卷积神经网络的基本结构包括输入层、卷积层、池化层、全连接层和输出层。其中,卷积层通过卷积操作提取特征,每个卷积层通常包含多个卷积核,每个卷积核对输入数据进行卷积运算,得到一个特征图。池化层则通过降采样来减少特征图的尺寸,增强模型的鲁棒性和特征提取能力。全连接层将特征映射到一个高维特征空间中,再通过softmax函数进行分类或回归。

卷积神经网络的核心特点是权值共享和局部连接。权值共享是指在卷积层中,同一个卷积核在不同位置上的权值是相同的,这可以大大减少模型参数,提高模型泛化能力。局部连接是指在卷积层中,每个卷积核只与输入数据的一部分进行卷积运算,而不是与整个输入数据进行卷积运算,这样可以提取出局部特征,增强模型的特征提取能力。

卷积神经网络在图像、视频、语音等信号数据的分类和识别任务中如表现出色,图像识别、分类、人脸识别、物体识别、交通标志识别等领域。近年来,卷积神经网络也在自然语言处理任务中展现出有效性。

from PIL import Image
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('./MNIST_data', one_hot=True)# 定义图
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])x_image = tf.reshape(x, [-1, 28, 28, 1])W_conv1 = tf.Variable(tf.truncated_normal([5, 5, 1, 32], stddev=0.1))
b_conv1 = tf.constant(0.1, shape=[32])h_conv1 = tf.nn.relu(tf.nn.conv2d(x_image, W_conv1, strides=[1, 1, 1, 1], padding='SAME') + b_conv1)
h_pool1 = tf.nn.max_pool(h_conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')W_conv2 = tf.Variable(tf.truncated_normal([5, 5, 32, 64], stddev=0.1))
b_conv2 = tf.constant(0.1, shape=[64])h_conv2 = tf.nn.relu(tf.nn.conv2d(h_pool1, W_conv2, strides=[1, 1, 1, 1], padding='SAME') + b_conv2)
h_pool2 = tf.nn.max_pool(h_conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')W_fc1 = tf.Variable(tf.truncated_normal([7 * 7 * 64, 1024], stddev=0.1))
b_fc1 = tf.constant(0.1, shape=[1024])h_pool2 = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2, W_fc1) + b_fc1)keep_prob = tf.placeholder(tf.float32)
h_fc1 = tf.nn.dropout(h_fc1, keep_prob)W_fc2 = tf.Variable(tf.truncated_normal([1024, 10], stddev=0.1))
b_fc2 = tf.constant(0.1, shape=[10])y_conv = tf.matmul(h_fc1, W_fc2) + b_fc2
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
prediction = tf.argmax(y_conv, 1)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))saver = tf.train.Saver()  # defaults to saving all variables
process_train = Falsewith tf.Session() as sess:if process_train:sess.run(tf.global_variables_initializer())for i in range(20000):batch = mnist.train.next_batch(100)_, train_accuracy = sess.run([train_step, accuracy],feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})if i % 100 == 0:print("step %d, training accuracy %g" % (i, train_accuracy))# 保存模型参数,注意把这里改为自己的路径saver.save(sess, './mnist_model/model.ckpt')print("test accuracy %g" % accuracy.eval(feed_dict={x: mnist.test.images,y_: mnist.test.labels, keep_prob: 1.0}))else:saver.restore(sess, "./mnist_model/model.ckpt")pred_file = "./3.png"img_content = Image.open(pred_file)img_content = img_content.resize([28, 28])pred_content = img_content.convert("1")pred_pixel = list(pred_content.getdata())  # get pixel valuespred_pixel = [(255 - x) * 1.0 / 255.0 for x in pred_pixel]pred_num = sess.run(prediction, feed_dict={x: [pred_pixel], keep_prob: 1.0})print('recognize result:')print(pred_num)

自然语言处理NLP

Word Embedding

Word Embedding,即“词嵌入”或“单词嵌入”,是自然语言处理(NLP)中的一组语言建模和特征学习技术的统称,其中词语或短语从词汇表被映射为实数的向量。这些向量通常会捕获词语之间的某种语义或句法关系,从而实现对词汇表中单词的数值化表示。

Word Embedding的主要目标是找到一个低维空间,将每个词从高维空间(词汇表)映射到这个低维空间,并使得语义上相似的词在这个低维空间中的距离较近。这样的映射可以帮助机器学习模型更好地理解和处理文本数据。

Word Embedding的几种常见方法包括:

  1. Word2Vec:由Google的研究人员开发,包括Skip-gram和CBOW两种模型。Word2Vec通过训练神经网络来学习词向量,使得具有相似上下文的词具有相似的向量表示。

  2. GloVe:全局向量表示法,基于词语的共现统计信息来生成词向量。它结合了局部上下文窗口方法和全局统计信息,以捕获词的语义关系。

  3. FastText:扩展了Word2Vec,不仅考虑词本身,还考虑词的n-gram信息,以更好地处理未登录词和形态变化。

  4. BERT(Bidirectional Encoder Representations from Transformers):基于Transformer的预训练模型,通过大量的无监督文本数据训练,可以生成上下文相关的词嵌入。BERT的出现极大地推动了NLP领域的发展,尤其是在各种NLP任务中取得了显著的性能提升。

Word Embedding在自然语言处理的许多任务中都发挥了重要作用,如文本分类、情感分析、命名实体识别、问答系统等。通过使用这些预训练的词嵌入,模型可以更好地捕获文本的语义信息,从而提高性能。

词向量

词向量学习方法:LSA、PLSA

LSA,全称Latent Semantic Analysis,中文译为潜在语义分析,是一种基于向量空间模型的文本表示方法。它通过分析文本集合中词语的共现关系,挖掘出词语之间的潜在语义结构,并将文本表示为低维的向量空间中的点,从而实现对文本的高效表示和相似度计算。

LSA的核心思想是将文本中的词语映射到一个低维的潜在语义空间,使得在这个空间中,语义上相似的词语具有相近的表示。这样,即使文本中的词语不完全相同,只要它们具有相似的语义,它们在潜在语义空间中的表示就会很接近。

LSA在文本挖掘、信息检索、自然语言处理等领域有着广泛的应用。它可以帮助我们更好地理解文本的语义内容,提高文本分类、聚类、相似度计算等任务的性能。同时,LSA也可以用于构建语义相关的词典或主题模型,为文本分析和挖掘提供有力的工具。

需要注意的是,虽然LSA在文本表示和语义挖掘方面具有一定的优势,但它也存在一些局限性。例如,LSA对于文本集合的大小和词语的数量比较敏感,当文本集合较大或词语数量较多时,计算量会显著增加。此外,LSA还需要进行参数的选择和调整,以得到最佳的文本表示效果。

总的来说,LSA是一种有效的文本表示和语义挖掘方法,它可以帮助我们更好地理解和处理文本数据。在实际应用中,我们可以根据具体的需求和场景选择合适的LSA算法和参数设置,以得到最佳的文本表示和语义挖掘效果。

PLSA,全称Probabilistic Latent Semantic Analysis,中文译为概率潜在语义分析,是一种基于统计的文本主题模型。它是在LSA(潜在语义分析)的基础上发展而来的,通过引入概率模型来更好地描述文本、词语和主题之间的关系。

PLSA的基本思想是将文本集合中的每个文本看作是由一组潜在的主题按照某种概率分布生成的,而每个主题则是由一组词语按照另一种概率分布生成的。这样,文本、词语和主题之间就形成了一个概率图模型。

在PLSA中,每个文本被表示为一个主题的概率分布,而每个主题则被表示为一个词语的概率分布。通过训练文本集合,可以学习到这些概率分布,并用于后续的任务,如文本分类、聚类、相似度计算等。

相比于LSA,PLSA具有更强的解释性和灵活性。它不仅可以描述文本和词语之间的共现关系,还可以揭示文本和主题、主题和词语之间的深层关联。这使得PLSA在处理文本数据时更加精确和可靠。

然而,PLSA也存在一些局限性。例如,它需要预先设定主题的数量,而这个数量通常很难确定。此外,PLSA的模型复杂度较高,计算量较大,对于大规模的文本集合可能不太适用。

尽管如此,PLSA在文本挖掘和信息检索等领域仍然具有重要的应用价值。它可以有效地挖掘文本的潜在语义结构,提高文本表示和语义理解的准确性。同时,PLSA也可以与其他文本处理技术相结合,形成更强大的文本分析和挖掘系统。

词向量训练

词向量应用

循环神经网络RNN(语义理解)

基本原理

基本应用

RNN的缺陷

循环神经网络(RNN)在处理序列数据时具有强大的能力,尤其是处理那些前后依赖关系较强的序列数据时。然而,RNN也存在一些缺陷,这些缺陷限制了其在某些任务上的性能和应用范围。以下是RNN的一些主要缺陷:

  1. 梯度消失与梯度爆炸:在训练RNN时,梯度在反向传播过程中可能会变得非常小(梯度消失)或非常大(梯度爆炸)。这主要是因为RNN在序列的每个时间步上共享相同的参数,并且在计算梯度时涉及到多个时间步的累积。梯度消失可能导致RNN无法学习到长距离依赖关系,而梯度爆炸则可能导致训练过程不稳定。

  2. 难以处理长序列:由于梯度消失问题,RNN在处理长序列时可能会遇到困难。长序列中的信息可能无法在RNN的状态中有效地传递和保留,导致模型无法捕捉到序列的远端依赖关系。

  3. 模型结构相对简单:与更复杂的深度学习模型相比,RNN的模型结构相对简单。虽然这有助于减少模型的复杂性和计算量,但也限制了其在处理复杂任务时的性能。例如,RNN可能无法充分捕获序列中的多层次结构和非线性关系。

  4. 对输入顺序敏感:RNN在处理序列数据时,对输入的顺序非常敏感。如果序列中的元素顺序发生变化,RNN的性能可能会受到很大影响。这种敏感性在某些任务中可能是有益的,但在其他任务中可能会成为限制。

为了克服这些缺陷,研究者们提出了一系列改进方法,如长短时记忆网络(LSTM)和门控循环单元(GRU)等。这些改进方法通过引入门控机制和记忆单元,增强了RNN处理长序列和捕捉远程依赖关系的能力。此外,随着深度学习技术的不断发展,还涌现出了其他类型的序列模型,如Transformer和BERT等,这些模型在处理序列数据时具有更强的性能和灵活性。

LSTM (特殊的RNN)

练习_聊天机器人实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI助手API接入-问答对自动生成

支持GPT-3.5-Turbo, GPT-4o, GPT-4-Turbo import json import openai from pathlib import Path import os client openai.OpenAI(base_urlbase_url, api_keyapi_key) file client.files.create( fileopen("H3.pdf", "rb"), purposeassistants ) …

成功解决“ModuleNotFoundError: No Module Named ‘utils’”错误的全面指南

成功解决“ModuleNotFoundError: No Module Named ‘utils’”错误的全面指南 在Python编程中,遇到ModuleNotFoundError: No Module Named utils这样的错误通常意味着Python解释器无法找到名为utils的模块。这可能是由于多种原因造成的,比如模块确实不存…

念念不忘,必有回响 的 echo

念念不忘,必有回响 的 echo 念念不忘,必有回响 的 echo几个示例更多信息 念念不忘,必有回响 的 echo echo命令用于在终端设备上输出字符串或变量的值,类似于Python的print和C语言的printf,是Linux系统中最常用的命令…

深度学习笔记:0.cuda安装,成功

B站上说:cs上骗子太多。文章太久,我深以为然。用了一天。才装好。其实很简单。 CUDA安装教程(超详细)-CSDN博客文章浏览阅读1w次,点赞5次,收藏56次。windows10 版本安装 CUDA ,首先需要下载两个…

【并发程序设计】总篇集(八万字)

11_Concurrent_Programing 1.进程概念 在Linux中,进程是操作系统分配资源和调度运行的基本单位。 Linux中的进程有以下用处: 提高CPU利用率:通过进程的并发执行,可以让多个程序同时利用计算机的资源,这样每个用户都…

部署metrics-server

kubeadm部署metrics-server 需求:生产环境是kubeadm部署的v1.22.2版本的k8s,统计资源时发现这套环境没有部署metrics-server这个服务,今天来部署一下 1、在github社区找到这个项目并下载 rootjumpserver-cmcc:~# wget https://github.com/…

你需要知道关于 Java 线程一些最基本的事情

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

《SpringBoot3+Vue3实战》系列文章目录

前后端分离(Frontend-Backend Separation)是一种软件架构设计模式,它将传统的Web应用中的前端(用户界面)和后端(服务器逻辑和数据存储)从应用层面进行解耦,使得两者可以独立地开发、…

Linux CFS调度器简介

文章目录 前言一、概要二、实现2.1 简介2.2 算法实现2.3 内核源码 三、特点四、调度策略五、调度类参考资料 前言 早期的Linux调度器采用了简化的设计,显然并不针对具有许多处理器甚至超线程的大规模架构。Linux 1.2调度器使用循环队列对可运行任务进行管理&#x…

昆仑万维官宣开源2000亿稀疏大模型Skywork-MoE

6月3日,昆仑万维宣布开源2千亿稀疏大模型Skywork-MoE,性能强劲,同时推理成本更低。 据「TMT星球」了解,Skywork-MoE基于之前昆仑万维开源的Skywork-13B模型中间checkpoint扩展而来,是首个完整将MoE Upcycling技术应用…

北京Profinet转Modbus网关配置调试详解

一、背景:在工业自动化系统中,PLC(可编程逻辑控制器)与流量计之间的通信是非常重要的,以确保数据准确传输并实现控制功能。然而,由于PLC和流量计可能采用不同的通信协议(如Profinet和Modbus&…

探索Java的DNA-JVM字节码深度解析

引言 在Java的世界里,JVM(Java虚拟机)是我们程序运行的心脏。而字节码,作为JVM的血液,携带着程序的执行指令。今天,我们将深入探索Java字节码的奥秘,一窥JVM如何将人类可读的代码转化为机器可执…

【小白向】微信小程序解密反编译教程

# 前言 最近笔者有做到微信小程序的渗透测试,其中有一个环节就是对微信小程序的反编译进行源码分析,所谓微信小程序反编译,就是将访问的小程序进行反向编译拿到部分源码,然后对源码进行安全审计,分析出其中可能存在的…

图形学初识--颜色混合

文章目录 前言正文为什么要有颜色混合?颜色混合常见实现方式?上述颜色混合注意点 结尾:喜欢的小伙伴点点关注赞哦! 前言 本章节补充一下颜色混合的内容,主要包含:为什么要有颜色混合?颜色混合常实现方式&a…

Centos 7 安装刻录至硬件服务器

前言 在日常测试中,会遇到很多安装的场景,今天给大家讲一下centos 7 的安装,希望对大家有所帮助。 一.下载镜像 地址如下: centos官方镜像下载地址https://www.centos.org/download/ 按照需求依次点击下载 二.镜像刻录 镜像刻…

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

历史文章(文章累计500) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

Shopify 独立站监控观测最佳实践

Shopify 简介 Shopify 是一个全球领先的电子商务平台,它为商家提供了一整套在线商店解决方案。自 2006 年成立以来,Shopify 已经帮助数百万商家在全球范围内建立和发展他们的在线业务。 监控观测 Shopify 站点对于确保业务连续性、优化用户体验和提高运…

Linux shell编程学习笔记56:date命令——显示或设置系统时间与日期

0 前言 2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。在收集的信息中,应该有一条是搜索信息的时间。 1. date命令 的功能、格式和选项说明 我们可以使用命令 date --help 来查看 d…

Kafka之Broker原理

1. 日志数据的存储 1.1 Partition 1. 为了实现横向扩展,把不同的数据存放在不同的 Broker 上,同时降低单台服务器的访问压力,我们把一个Topic 中的数据分隔成多个 Partition 2. 每个 Partition 中的消息是有序的,顺序写入&#x…

LeetCode刷题:反转链表

leetCode真题 206. 反转链表 属于基础简单题目 常见的做法有递归和while循环 递归 // 1. 递归参数和返回值public static ListNode reverseList(ListNode head) {// 1. 递归终止条件if (head null || head.next null) {return head;}// 递归逻辑ListNode last reverseL…