6_循环神经网络
1、理论部分
卷积神经网络-CV
循环神经网络-NLP
- Embedding与变长输入的处理
- 序列式问题
- 循环神经网络
- LSTM模型
1.1、Embedding与变长输入的处理
Embedding
- One-hot编码;
- Word -> index -> [0,0,0,…,0,1,0,…,0]
- Dense embedding(密集编码)
- Word -> index -> [1.2,4.2,2.9,…,0.1]
变长输入
- Word -> index -> [1.2,4.2,2.9,…,0.1]
- Padding
- Word index:[3,2,5,9,1]
- Padding:[3,2,5,9,1,0,0,0,0,0]
- 合并
为什么需要循环神经网络——合并+padding的缺点
- 信息丢失
- 多个embedding合并
- Pad噪音、无主次
- 无效计算太多,低效
- 太多的padding
1.2、循环神经网络
序列式问题
1.3、LSTM长短期记忆网络
为什么需要LSTM
- 普通RNN的信息不能长久传播(存在于理论上)
- 引入选择机制
- 选择性输出
- 选择性输入
- 选择性遗忘
- 选择性 -> 门
- Sigmoid函数:[0,1]
- 门限机制
- 向量A -> sigmoid -> [0.1,0.9,0.4,0,0.6]
- 向量B -> [13.8,14,-7,-4,30.0]
- A为门限,B为信息
- A * B = [0.138,12.6,-2.8,0,18.0]
2、实战部分
- Keras实战embedding
- Keras搭建循环神经网络
- Keras文本生成实战
- Keras搭建LSTM网络
- Kaggle文本分类数据集实战
2.1、Keras实战embedding
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
imdb = keras.datasets.imdb #电影评论(好/坏)
vocab_size = 10000 #限制数据集中词表数量
index_from = 3 #控制词表的index从哪里开始算
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
num_words = vocab_size, index_from = index_from)
print(train_data[0], train_labels[0]) #train_data每一个样本,都是一个向量
print(train_data.shape, train_labels.shape) #train_data.shape因为第二维度不定长,所以没给出来,train_labels.shape就是一维的
print(len(train_data[0]), len(train_data[1]))
print</