深度学习知识与心得

目录

深度学习简介

传统机器学习

深度学习发展

感知机

前馈神经网络

前馈神经网络(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.rhkb.cn/news/339928.html

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

相关文章

Docker 私有仓库部署和管理

目录 一、案例一 概述 二、案例一 前置知识点 2.1、什么是 Docker Compose 2.2、什么是 Consul 三、案例一 使用 docker Compose 搭建 Consul 集群环境 3.1、案例实验环境 3.2、案例需求 四、案例实施 4.1、Docker 网络通信 1)端口映射 2&#xf…

Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器

SmartDNS是推荐本地运行的DNS服务器,SmartDNS接受本地客户端的DNS查询请求,从多个上游DNS服务器获取DNS查询结果,并将访问速度最快的结果返回给客户端,提高网络访问速度和准确性。 支持指定域名IP地址,达到禁止过滤的效…

Java整合EasyExcel实战——3(上下列相同合并单元格策略)

参考&#xff1a;https://juejin.cn/post/7322156759443095561?searchId202405262043517631094B7CCB463FDA06https://juejin.cn/post/7322156759443095561?searchId202405262043517631094B7CCB463FDA06 准备条件 依赖 <dependency><groupId>com.alibaba</gr…

Spring Cloud学习笔记(Nacos):Nacos持久化(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、Overview2、单机使用MySQL 1、Overview 我们关闭单机下的Nacos后&#xff0c;再重新启动会发现之前配置的内容没有被删除。这时因为Nacos有内嵌的数据库derby&#xff0c;会自己持久化。 但是在集群的情况下…

大模型应用框架-LangChain

LangChain的介绍和入门 &#x1f4a5; 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月&#xff0c;它是围绕LLMs&#xff08;大语言模型&#xff09;建立的一个框架&#xff0c;LLMs使用机器学习算法和海量数据来分析和理解自然语言&#xff0c;GPT3.5、GPT4是…

如何卸载ollama

文章目录 一 概述二 卸载2.1 Windows平台卸载 ollama2.2 Linux 平台卸载 ollama2.3 Docker 平台卸载 ollama 参考链接 一 概述 本文档主要讲述 ollama 如何卸载&#xff0c;适用范围包括 Windows Linux 以及 Docker 等平台的安装方式。 二 卸载 2.1 Windows平台卸载 ollama …

【SAP HANA 33】前端参数多选情况下HANA如何使用in来匹配?

场面描述: 在操作界面经常会出现某个文本框需要多选的情况,然后后台需要根据多选的值进行匹配搜索。 一般处理的情况是: 1、在Java后端动态生成SQL 2、不改变动态SQL的情况,直接当做一个正常的参数进行传递 本次方案是第二个,直接当做一个正常的字符串参数进行传递即…

36【Aseprite 作图】蒸笼盖——拆解

1 蒸笼盖框架 里圈和外圈的形状都是一样的 扶手处&#xff0c;2 1 2 2 2&#xff08;最好都是2&#xff0c;拐角处用1&#xff09; 2 上色 中间的波浪&#xff0c;是2 2 2 上&#xff08;再 2 2 2 下&#xff09; 下方阴影&#xff0c;左边的阴影&#xff0c;右边的阴影颜色…

音视频开发—FFmpeg播放YUV文件,YUV转换为JPEG操作

文章目录 1.使用命令行播放YUV数据1.1命令解析1.2参数说明 2.使用C语言实现将YUV数据转为JPEG图片格式2.1需求分析2.2读取YUV源文件2.3将YUV数据封装为AVFrame2.4将NV12 转换为YUV420平面格式2.5初始化MJPEG编码器2.6将YUV420P编码为JPEG2.7将编码数据写入图片文件2.8完整代码 …

Python 图书馆管理系统 有GUI界面 【含Python源码 MX_031期】

使用python3&#xff0c;PyQt5&#xff0c;Sqlite3数据库搭建 数据库版本为MySQL&#xff1a;Python 图书馆管理系统&#xff08;MySQL数据库&#xff09; 有GUI界面 【含Python源码 MX_032期】-CSDN博客 主要功能&#xff1a; 用户注册、登录、修改密码、用户管理存储图书信…

详解Java反序列化漏洞

001&#xff1a;序列化基本概念 序列化&#xff1a;将对象写入IO流中反序列化&#xff1a;从IO流中恢复对象意义&#xff1a;序列化机制允许将实现序列化的Java对象转换位字节序列&#xff0c;这些字节序列可以保存在磁盘上&#xff0c;或通过网络传输&#xff0c;以达到以后恢…

C++多线程同步

C使用多线程必须包含头文件 #include <thread> 来实现 当多个线程同事访问一个对象的时候&#xff0c;会产生数据竞争现象。 这个时候&#xff0c;就可以加锁&#xff0c;同步资源&#xff0c;解决数据竞争。 最简单就是互斥锁mutex 上代码&#xff0c;计算一个数自增到1…

python常见数据分析函数

apply DataFrame.apply(func, axis0, broadcastFalse, rawFalse, reduceNone, args(), **kwds) 第一个参数是函数 可以在Series或DataFrame上执行一个函数 支持对行、列或单个值进行处理 import numpy as np import pandas as pdf lambda x: x.max()-x.min()df pd.DataFrame(…

韩顺平0基础学java——第15天

p303-326 重写override 和重载做个对比 注&#xff1a;但子类可以扩大范围&#xff0c;比如父类是protected&#xff0c;子类可以是public 多态 方法或对象具有多种形态&#xff0c;是面向对象的第三大特征&#xff0c;多态是建立在封装和继承基础之上的。 多态的具体体现…

【JavaEE】Servlet

文章目录 一、Servlet 是什么二、如何创建Servlet程序1、创建项目2、引入依赖3、创建目录4、编写代码5、打包程序6、部署程序7、验证程序 一、Servlet 是什么 二、如何创建Servlet程序 1、创建项目 2、引入依赖 Maven 项目创建完后&#xff0c;会自动生成一个 pom.xml 的文…

Spi Pwm Tim 对比分析

spi SPI时序图 (spi是主从机 所以主机需要从机数据 需要主极先喊从机 把从机喊答应了 才能开始读从机的数据&#xff09; cpol时钟极性 和cpha时钟相位分析 1.cpha为高&#xff0c;cpol为高&#xff0c;则偶数上升沿有效 2.cpha为高&#xff0c;cpol为低&#xff0c;则偶数…

山东军博会—2024年智能装备和通信技术展:见证类脑视觉芯片如何重塑未来

随着人工智能技术的飞速发展&#xff0c;类脑计算成为了科研领域的一个热点。最近&#xff0c;我国科学家成功研发出世界首款类脑互补视觉芯片&#xff0c;这一重大突破不仅标志着我国在人工智能硬件领域迈出了重要一步&#xff0c;也为未来的智能设备带来了无限可能。本文将从…

【轻触按键】终篇 -- 纯硬 VS 复合

1、选型 2、开关机电路–填坑1 3、开关机电路–填坑1.a 4、开关机电路–复合芯片解决方案 填坑2 总结 上述几篇&#xff0c;基本上都是比较靠谱的硬件方案&#xff1b; ①所有开关均关闭&#xff1b; X1灯亮&#xff1b;P-MOS 管Q1关断&#xff1b; 特别注意&#xff0c;…

代码界的奥斯卡:SpringBoot测试的艺术与科学

探索SpringBoot测试的神秘世界&#xff0c;揭秘如何成为代码质量的守护神&#xff01;从基础环境搭建到高级集成测试&#xff0c;本系列教程带你一步步构建坚不可摧的测试防线。深入JUnit 5的强大功能&#xff0c;学习如何用MockMvc和Testcontainers打造逼真的测试场景。准备好…

小型企业网络组网与配置仿真实验

实验要求如下: 我这里以学号46为例 一、IP 地址规划表 &#xff08;一&#xff09;主类网络 &#xff08;二&#xff09;子网划分 需要自己计算有效ip范围 在C类主网络192.168.46.0/24中&#xff0c;我们需要先了解这个网络的子网掩码为255.255.255.0&#xff0c;其二进制…