深度学习知识与心得

news2024/10/6 6:45:01

目录

深度学习简介

传统机器学习

深度学习发展

感知机

前馈神经网络

前馈神经网络(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_data

mnist = 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 = False

with 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 values
    pred_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.coloradmin.cn/o/1717233.html

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

相关文章

LabVIEW中进行步进电机的位置控制

在LabVIEW中进行步进电机的位置控制,通常涉及以下几个关键步骤:设置硬件、配置通信、编写控制算法和实施反馈控制。以下是一个详细的介绍。 硬件设置 步进电机:选择合适的步进电机,根据负载和应用需求选择适当的步数和转矩。 驱…

【力扣】1312. 让字符串成为回文串的最少插入次数

一、题目描述 二、题解 本题我们利用动态规划的思想来解决。 1、状态表示 首先创建一个dp数组,dp[i][j] 表示的是将字符串 s 的 [ i, j ] 区间的这一子串,变成回文串的最少插入次数。 2、状态转移方程 3、初始化 根据「状态转移方程」,没…

煤矿输送设备无人化运维巡检解决方案

一、煤矿行业目前存在的挑战和难题 煤矿行业面临着复杂的环境,如粉尘、潮湿、高温、高瓦斯等,对巡检设备和人员安全有威胁。并且设备分布广、需要长时间作业,全面巡检难度大、对巡检工作的耐力和持续性要求高。而煤矿输送设备无人化运维巡检…

Comfyui图片高清放大方法

在过去的两期内容中,我们探讨了如何安装 ComfyUI 及其在图像生成中的应用。 本期,我们将深入了解如何使用 ComfyUI 对图片进行高清放大. 在开始今天的主题之前,请确保您已经在个人电脑上安装了 ComfyUI。同时,确保您已将 ESRGAN_4…

ios:文本框默认的copy、past改成中文复制粘贴

问题 ios 开发&#xff0c;对于输入框的一些默认文案展示&#xff0c;如复制粘贴是英文的&#xff0c;那么如何改为中文的呢 解决 按照路径找到这个文件 ios/项目/Info.plist&#xff0c;增加 <key>CFBundleAllowMixedLocalizations</key> <true/> <…

Oracle Linux上安装ORDS

ORDS就是Oracle REST Data Services。 环境如下&#xff1a; Oracle Linux 8Oracle Database 19cIP地址为A.B.C.D 要安装最新版本的ORDS&#xff0c;当前为24.1.1。 全程参考文档&#xff1a;Installing and Configuring Oracle REST Data Services 安装ORDS 添加reposit…

固定翼飞机(固定翼飞行器)种类丰富 国家政策推动行业发展速度加快

固定翼飞机&#xff08;固定翼飞行器&#xff09;种类丰富 国家政策推动行业发展速度加快 固定翼飞机又称固定翼飞行器&#xff0c;指机翼固定于机身&#xff0c;可通过固定机翼产生升力的飞行器。固定翼飞机具有机动性强、运载量大、航程远、飞行速度快等优势&#xff0c;在农…

Redis用GEO实现附近的人功能

文章目录 ☃️概述☃️命令演示☃️API将数据库表中的数据导入到redis中去☃️实现附近功能 ☃️概述 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。…

排八字软件有哪些?

排八字软件有哪些&#xff1f;在市面上有很多排八字的软件可供选择&#xff0c;其中一些比较知名的有&#xff1a; 无敌八字排盘软件&#xff1a;这是一款功能强大的八字排盘软件&#xff0c;提供详细的八字解析和命理分析服务&#xff0c;且完全免费。 网易星盘&#xff1a;网…

珠宝首饰AR虚拟3D试戴增强企业商品营销效果

在西安这座古老与现代交织的城市中&#xff0c;VRAR软件开发公司相比其他城市也略多一些&#xff0c;作为专业的西安AR软件开发公司&#xff0c;我们正凭借着前沿的AR增强现实/VR虚拟现实技术&#xff0c;为客户打造独一无二的互动体验。 专业团队&#xff0c;定制开发 我们拥有…

OAK相机如何将 YOLOv9 模型转换成 blob 格式?

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是Ashely。 专…

如何做好流程优化?看这里的目的、原则和方法

流程管理的本质是通过构造卓越的业务流程让流程增值&#xff0c;为客户创造真正的价值。 但卓越的业务流程并不是一蹴而就的&#xff0c;有一个过程&#xff0c;这个过程就是业务流程和流程管理体系不断优化提升的过程&#xff08;可以参照流程成熟度评价模型&#xff09;。 …

[pdf,epub]《软件方法》2024版电子书共290页(202405更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 已上传本账号CSDN资源。 或者到以下链接下载&#xff1a; http://www.umlchina.com/url/softmeth2024.html&#xff0c;或点击“阅读原文”。 如果需要提取码&#xff1a;umlc 已排…

【SpringMVC】_简单示例计算器

目录 1. 需求分析 2. 接口定义 3. 请求参数 4. 响应数据 5. 服务器代码 6. 前端页面代码 7. 运行测试 为阶段性总结与应用&#xff0c;现将以Spring MVC项目创建一个可以实现加法的计算器为例 1. 需求分析 加法计算器功能&#xff0c;对两个整数进行相加&#xff0c;需…

uniapp跨端代码编写(h5和钉钉小程序)

页面开发 差异。小程序编译机制不一样&#xff0c;我在写h5的时候&#xff0c;页面布局啥的都是用uniapp的扩展组件来修改的&#xff08;都是改的原生组件的样式&#xff09;&#xff0c;小程序编译有组件隔离&#xff0c;不能直接修改组件的原生样式&#xff0c;查了很多资料…

Golang | Leetcode Golang题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; func minimumTotal(triangle [][]int) int {n : len(triangle)f : make([]int, n)f[0] triangle[0][0]for i : 1; i < n; i {f[i] f[i - 1] triangle[i][i]for j : i - 1; j > 0; j-- {f[j] min(f[j - 1], f[j]) triangle[i][j]…

[RK3588-Andoird12] 关于LED灯控芯片is31fl3216和is31fl3236调试

问题描述 RK默认dts配置中并没有issi,is31fl32xx相关的配置指导。 is31fl3236是12X3 36路RGB is31fl3216是6X3 18路RGB 解决方案&#xff1a; is31fl3236 dts配置如下&#xff1a; &i2c1 {clock-frequency <400000>;status "okay";is31fl3236: led-co…

苏州金龙新V系客车科技助力“粤”动广州

粤动活力新V系&#xff01; 5月23日&#xff0c;苏州金龙新V系智慧客车推介会在羊城广州举行。活动现场展出了4款新V系代表车型&#xff0c;来自广东省旅游客运、道路运输行业的200余位从业者齐聚一堂&#xff0c;共同品鉴、体验了苏州金龙新V系产品的“新、心、芯”魅力。苏州…

接口设计的最佳实践-下篇

大多数程序员&#xff0c;做得最多的事&#xff0c;也不过是写接口这件事而已。 今天继续总结下接口设计需要注意的点。尽量每种都给出具体的场景、案例等&#xff0c;希望大家能有所收获。 1、接口幂等 幂等性&#xff1a;是指一个操作或者一个服务&#xff0c;无论执行多少…

GD32F470+lwip 丢包问题分析及解决

最近在用GD32和管理机之间用TCP协议开发一个功能&#xff0c;功能都没问题&#xff0c;后面跑大量发包时候的连续测试时&#xff0c;总是会出现偶发性的&#xff0c;大概几分钟到数十分钟的一次丢包。尽管在应用层做了超时机制&#xff0c;一旦超时就会重新建立socket链接并重新…