离散数据的分类, 接连数据的猜测
专家体系: 把专家的经验告诉核算机, 核算机履行逻辑判别, 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 mdecin"]
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 mdecin"]
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 mdecin"]
# 界说分词器
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 mdecin"]
# 界说分词器
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打印出网络的结构和参数计算