深度学习初体验:神经网络和框架

释放双眼,带上耳机,听听看~!
深度学习初体验,了解神经网络和深度学习框架的基本概念和应用

离散数据的分类, 连续数据的预测

专家系统: 把专家的经验告诉计算机, 计算机执行逻辑判别, IF Case语句, 给出分类结果

神经网络: 采集大量(特征1, 特征2……标签)数据构成数据集, 将数据集喂给搭建好的神经网络结构, 模型读入新输入特征, 输出识别的结果

学派

行为主义:基于控制论,构建感知-动作控制系统。 (控制论, 如平衡、行走、避障等自适应控制系统)

符号主义:基于算数逻辑表达式,求解问题时先把问题描述为 表达式,再求解表达式。(可用公式描述、实现理性思维,如专家系统)

连接主义:仿生学,模仿神经元连接关系。(仿脑神经元连接, 实现感性思维,如神经网络

概念

含义

深度学习是机器学习的一种,是一种通过模拟人脑神经网络的方式,让计算机自动学习数据的一种方法。深度学习的核心思想是通过多层神经网络来学习数据的特征,并进行分类、识别或预测等任务。

应用

深度学习的应用非常广泛,例如图像识别、语音识别、自然语言处理、推荐系统等领域。

神经网络

在深度学习中,常用的算法包括卷积神经网络(CNN)、循环神经网络(RNN)和深度信念网络(DBN)等。

机器学习

监督式学习

监督式学习是指在有标记数据的情况下,通过训练模型使其能够预测新的未标记数据的标签或输出。这种方法需要有大量的标记数据来训练模型,例如分类、回归、序列预测等任务都可以使用监督式学习来解决。

非监督式学习

非监督式学习是指在没有标记数据的情况下,通过训练模型使其能够发现数据中的模式和结构。这种方法通常用于聚类、降维、异常检测等任务。

框架

Tensorflow

TensorFlow是由Google Brain团队开发的一个开源的深度学习框架,其主要用途是用于构建和训练神经网络。它提供了一个高度灵活的编程接口,可以在各种不同的平台上运行,包括CPU、GPU和TPU等。TensorFlow的核心是计算图,它是由一系列节点和边组成的数据结构,节点表示操作,边表示数据流。在TensorFlow中,我们可以通过构建计算图来定义模型,然后使用优化器来训练模型,最终得到我们想要的结果。TensorFlow还提供了许多高级功能,如自动微分、分布式训练和模型部署等,可以帮助我们更轻松地构建和部署深度学习模型。

MXNet

MXNet是一个由Apache开发的深度学习框架,它最初是在2014年由华盛顿大学计算机科学系的研究人员开发的,并在2015年加入了Apache孵化器。MXNet的目标是提供一个高效、灵活和可扩展的深度学习框架,它支持多种编程语言,包括Python、C++、Java、Scala和R。MXNet的核心是一个用C++编写的高性能计算引擎,它支持分布式训练和推理,并具有优秀的性能和可扩展性。MXNet还提供了一些高级功能,例如自动微分、动态图和混合精度训练等,这些功能使得MXNet在训练和部署深度学习模型方面非常灵活和强大。

PyTorch

PyTorch是一个由Facebook开发的深度学习框架,它最初是在2016年发布的。PyTorch的目标是提供一个易于使用的深度学习框架,它采用了动态图的方式来构建计算图,这使得PyTorch非常灵活和易于调试。PyTorch还提供了一些高级功能,例如自动微分、动态图和分布式训练等,这些功能使得PyTorch在训练和部署深度学习模型方面非常灵活和强大。PyTorch还提供了一些方便的工具,例如torchvision和torchaudio等,这些工具使得PyTorch在计算机视觉和语音处理等领域非常受欢迎。PyTorch还具有一个庞大的社区,因此用户可以轻松地找到各种教程、代码示例和预训练模型。

Tensorflow

安装🪟

安装Anaconda

1.下载链接

www.anaconda.com/download/

2.疯狂Next

创建Codna环境

1.打开Anaconda Prompt
2.创建虚拟环境XXXX
# 创建环境时指定Python的版本
conda create --name XXXX python=3.8# 创建环境时指定Python的版本
conda create --name XXXX python=3.8
3.激活环境
conda activate XXXXconda activate XXXX

4.安装tensorflow

conda install tensorflowconda install tensorflow

5.测试安装是否成功

import tensorflow as tf
tf.__version__import tensorflow as tf
tf.__version__

模型

卷积神经网络 CNN

卷积神经网络(CNN)是深度学习中非常常用的一种神经网络结构,主要应用于图像处理和计算机视觉领域。CNN的核心思想是通过卷积操作提取图像的特征,然后通过池化操作减少特征图的大小和计算量,最后使用全连接层将特征映射到输出层进行分类或回归。

CNN的主要组成部分包括卷积层、池化层和全连接层。卷积层通过卷积操作提取图像的局部特征,池化层通过减少特征图的大小和计算量来避免过拟合,全连接层则将特征映射到输出层进行分类或回归。此外,CNN还包括激活函数和正则化等技术,用于提高模型的性能和泛化能力。

在卷积层中,卷积核的大小和数量是需要根据具体任务进行调整的。较小的卷积核可以提取更细节的特征,而较大的卷积核可以提取更宏观的特征。卷积核的数量决定了模型可以提取的特征的种类和复杂度。

总的来说,CNN是一种非常强大的神经网络结构,可以在图像处理和计算机视觉领域中取得非常好的表现。

循环神经网络 RNN

循环神经网络(RNN)是一种常用于处理序列数据的神经网络结构,主要应用于自然语言处理和语音识别等领域。RNN的核心思想是通过循环结构实现对序列数据的建模,从而捕捉序列数据中的时序信息。

RNN的主要组成部分包括循环层和全连接层。循环层通过将前一时刻的输出作为当前时刻的输入,实现对序列数据的循环处理。在循环层中,RNN使用了一个称为“隐藏状态”的变量来存储序列数据中的历史信息,从而实现对序列数据的记忆。全连接层则将循环层的输出映射到输出层进行分类或回归。

RNN的一个重要变体是长短时记忆网络(LSTM),它通过引入门控机制来控制隐藏状态的更新和遗忘,从而解决了传统RNN中的梯度消失和梯度爆炸问题,提高了模型的性能和泛化能力。

总的来说,RNN是一种非常强大的神经网络结构,可以在序列数据建模任务中取得非常好的表现。LSTM作为RNN的一种重要变体,可以进一步提高模型的性能和泛化能力。

长短时记忆网络 LSTM

长短时记忆网络(LSTM)是一种经典的循环神经网络(RNN)架构,它通过引入“门控”机制来解决传统RNN中的梯度消失问题。LSTM中的“门”由一些特殊的神经网络层组成,它们可以控制信息的流动和保留。LSTM中的三个门分别是输入门、遗忘门和输出门,它们可以控制当前时刻的输入、上一时刻的状态和输出之间的信息流动。LSTM的核心思想是通过遗忘门来决定哪些信息需要被保留,通过输入门来决定哪些新信息需要被加入,最终通过输出门来得到当前时刻的输出。LSTM在自然语言处理、语音识别、机器翻译等任务中都有广泛的应用。

LSTM是一种时间递归神经网络,它出现的原因是为了解决RNN的一个致命的缺陷。原生的RNN会遇到一个很大的问题,叫做The vanishing gradient problem for RNNs,也就是后面时间的节点会出现老年痴呆症,也就是忘事儿,这使得RNN在很长一段时间内都没有受到关注,网络只要一深就没法训练。而LSTM网络具有“记忆性”,其原因在于不同“时间点”之间的网络存在连接,而不是单个时间点处的网络存在前馈或者反馈;并且LSTM擅长于处理多个变量的问题,该特性使其有助于解决时间序列预测问题。

Seq2Seq模型

训练模型

1.准备数据集
# 读取数据集
source_sentences = ["I am a student", "He is a teacher", "She is a doctor"]
target_sentences = ["Je suis étudiant", "Il est enseignant", "Elle est médecin"]
dataset = tf.data.Dataset.from_tensor_slices((source_sentences, target_sentences))# 读取数据集
source_sentences = ["I am a student", "He is a teacher", "She is a doctor"]
target_sentences = ["Je suis étudiant", "Il est enseignant", "Elle est médecin"]
dataset = tf.data.Dataset.from_tensor_slices((source_sentences, target_sentences))
2.数据预处理
# 定义分词器
source_tokenizer = tf.keras.preprocessing.text.Tokenizer()
target_tokenizer = tf.keras.preprocessing.text.Tokenizer()

# 训练分词器
source_tokenizer.fit_on_texts(source_sentences)
target_tokenizer.fit_on_texts(target_sentences)

# 对输入和目标序列进行分词
source_seq = source_tokenizer.texts_to_sequences(source_sentences)
target_seq = target_tokenizer.texts_to_sequences(target_sentences)

# 对输入和目标序列进行填充,使其长度相同
max_seq_len = max(len(seq) for seq in source_seq + target_seq)
source_seq = tf.keras.preprocessing.sequence.pad_sequences(source_seq, maxlen=max_seq_len, padding='post')
target_seq = tf.keras.preprocessing.sequence.pad_sequences(target_seq, maxlen=max_seq_len, padding='post')

# 定义输入和目标序列的词汇表大小
source_vocab_size = len(source_tokenizer.word_index) + 1
target_vocab_size = len(target_tokenizer.word_index) + 1# 定义分词器
source_tokenizer = tf.keras.preprocessing.text.Tokenizer()
target_tokenizer = tf.keras.preprocessing.text.Tokenizer()

# 训练分词器
source_tokenizer.fit_on_texts(source_sentences)
target_tokenizer.fit_on_texts(target_sentences)

# 对输入和目标序列进行分词
source_seq = source_tokenizer.texts_to_sequences(source_sentences)
target_seq = target_tokenizer.texts_to_sequences(target_sentences)

# 对输入和目标序列进行填充,使其长度相同
max_seq_len = max(len(seq) for seq in source_seq + target_seq)
source_seq = tf.keras.preprocessing.sequence.pad_sequences(source_seq, maxlen=max_seq_len, padding='post')
target_seq = tf.keras.preprocessing.sequence.pad_sequences(target_seq, maxlen=max_seq_len, padding='post')

# 定义输入和目标序列的词汇表大小
source_vocab_size = len(source_tokenizer.word_index) + 1
target_vocab_size = len(target_tokenizer.word_index) + 1
3.定义模型
# 定义模型
encoder_inputs = tf.keras.layers.Input(shape=(None,))
encoder_emb = tf.keras.layers.Embedding(source_vocab_size, 256)(encoder_inputs)
encoder_lstm = tf.keras.layers.LSTM(256, return_state=True)
encoder_outputs, state_h, state_c = encoder_lstm(encoder_emb)
encoder_states = [state_h, state_c]

decoder_inputs = tf.keras.layers.Input(shape=(None,))
decoder_emb = tf.keras.layers.Embedding(target_vocab_size, 256)(decoder_inputs)
decoder_lstm = tf.keras.layers.LSTM(256, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_emb, initial_state=encoder_states)
decoder_dense = tf.keras.layers.Dense(target_vocab_size, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

model = tf.keras.models.Model([encoder_inputs, decoder_inputs], decoder_outputs)# 定义模型
encoder_inputs = tf.keras.layers.Input(shape=(None,))
encoder_emb = tf.keras.layers.Embedding(source_vocab_size, 256)(encoder_inputs)
encoder_lstm = tf.keras.layers.LSTM(256, return_state=True)
encoder_outputs, state_h, state_c = encoder_lstm(encoder_emb)
encoder_states = [state_h, state_c]

decoder_inputs = tf.keras.layers.Input(shape=(None,))
decoder_emb = tf.keras.layers.Embedding(target_vocab_size, 256)(decoder_inputs)
decoder_lstm = tf.keras.layers.LSTM(256, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_emb, initial_state=encoder_states)
decoder_dense = tf.keras.layers.Dense(target_vocab_size, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

model = tf.keras.models.Model([encoder_inputs, decoder_inputs], decoder_outputs)
4.训练模型
# 编译模型
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy')

# 训练模型
model.fit([source_seq, target_seq[:,:-1]], target_seq[:,1:], batch_size=64, epochs=50)# 编译模型
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy')

# 训练模型
model.fit([source_seq, target_seq[:,:-1]], target_seq[:,1:], batch_size=64, epochs=50)
5.评估模型
# 评估模型
score = model.evaluate([source_seq, target_seq[:,:-1]], target_seq[:,1:], verbose=0)
print('Test loss:', score)# 评估模型
score = model.evaluate([source_seq, target_seq[:,:-1]], target_seq[:,1:], verbose=0)
print('Test loss:', score)
6.保存模型
# 保存模型
model.save('demo.h5')# 保存模型
model.save('demo.h5')

测试模型功能性

1.定义分词器
import tensorflow as tf
import numpy as np

source_sentences = ["I am a student", "He is a teacher", "She is a doctor"]
target_sentences = ["Je suis étudiant", "Il est enseignant", "Elle est médecin"]

# 定义分词器
source_tokenizer = tf.keras.preprocessing.text.Tokenizer()
target_tokenizer = tf.keras.preprocessing.text.Tokenizer()

# 训练分词器
source_tokenizer.fit_on_texts(source_sentences)
target_tokenizer.fit_on_texts(target_sentences)

# 对输入和目标序列进行分词
source_seq = source_tokenizer.texts_to_sequences(source_sentences)
target_seq = target_tokenizer.texts_to_sequences(target_sentences)

# 对输入和目标序列进行填充,使其长度相同
max_seq_len = max(len(seq) for seq in source_seq + target_seq)import tensorflow as tf
import numpy as np

source_sentences = ["I am a student", "He is a teacher", "She is a doctor"]
target_sentences = ["Je suis étudiant", "Il est enseignant", "Elle est médecin"]

# 定义分词器
source_tokenizer = tf.keras.preprocessing.text.Tokenizer()
target_tokenizer = tf.keras.preprocessing.text.Tokenizer()

# 训练分词器
source_tokenizer.fit_on_texts(source_sentences)
target_tokenizer.fit_on_texts(target_sentences)

# 对输入和目标序列进行分词
source_seq = source_tokenizer.texts_to_sequences(source_sentences)
target_seq = target_tokenizer.texts_to_sequences(target_sentences)

# 对输入和目标序列进行填充,使其长度相同
max_seq_len = max(len(seq) for seq in source_seq + target_seq)
2.加载模型
# 加载模型
model = tf.keras.models.load_model('C:/Users/FuQingSong/PycharmProjects/pythonProject3/6666.h5')# 加载模型
model = tf.keras.models.load_model('C:/Users/FuQingSong/PycharmProjects/pythonProject3/6666.h5')
3.定义新的输入序列
# 定义一个新的输入序列
new_source_sentences = ["I am a student"]

# 对新的输入序列进行分词和填充
new_source_seq = source_tokenizer.texts_to_sequences(new_source_sentences)
new_source_seq = tf.keras.preprocessing.sequence.pad_sequences(new_source_seq, maxlen=max_seq_len, padding='post')

# 使用模型进行预测
predicted_seq = model.predict([new_source_seq, np.zeros((len(new_source_seq), 256))])

# 将预测结果转换为文本
predicted_sentences = []
for seq in predicted_seq:
    predicted_sentences.append(' '.join([target_tokenizer.index_word[idx] for idx in np.argmax(seq, axis=-1) if idx > 0]))

# 打印预测结果
for i, sentence in enumerate(predicted_sentences):
    print(f"Input sentence: {new_source_sentences[i]}")
    print(f"Translated sentence: {sentence}")# 定义一个新的输入序列
new_source_sentences = ["I am a student"]

# 对新的输入序列进行分词和填充
new_source_seq = source_tokenizer.texts_to_sequences(new_source_sentences)
new_source_seq = tf.keras.preprocessing.sequence.pad_sequences(new_source_seq, maxlen=max_seq_len, padding='post')

# 使用模型进行预测
predicted_seq = model.predict([new_source_seq, np.zeros((len(new_source_seq), 256))])

# 将预测结果转换为文本
predicted_sentences = []
for seq in predicted_seq:
    predicted_sentences.append(' '.join([target_tokenizer.index_word[idx] for idx in np.argmax(seq, axis=-1) if idx > 0]))

# 打印预测结果
for i, sentence in enumerate(predicted_sentences):
    print(f"Input sentence: {new_source_sentences[i]}")
    print(f"Translated sentence: {sentence}")
4.控制台输出
Input sentence: I am a student
Translated sentence: suis étudiantInput sentence: I am a student
Translated sentence: suis étudiant

搭建八股文

import

引入相关模块

train,test

告知要喂入网络的训练集和测试集是什么

要指定训练集的输入特征x _train和训练集的标签y train

还可以指定测试集的输入特征x test和测试集的标签y_test

model = tf.keras.models.Sequential

搭建网络结构

逐层描述每层网络

model.compile

配置训练方法

告知训练时使用哪种优化器

选择哪个损失函数

选择哪种评测指标

model.fit

执行训练过程

告知训练集和输入集的特征和标签

告知每个batch是多少

告知要迭代多次数据集

model.summary

用summary0打印出网络的结构和参数统计

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

LangChain: 人工智能领域的重要开发框架

2023-11-18 20:43:14

AI教程

ChatGPT PDF生成指南:让文档创建成为一种愉快的体验

2023-11-18 20:49:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索