# LSTM
**Repository Path**: edwinjiang703/LSTM
## Basic Information
- **Project Name**: LSTM
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-07-21
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LSTM
#### 项目介绍
一 文件介绍
1 train.py 增加了需要训练的数据集。 feed_dict的定义
2 utils.py 增加了如何获取训练集数据及数据处理
3 model.py 增加了RNN网络的定义和实现
4 sample.py 用word2vec生成的embedding文件做预测。修改model.build
二 word embding的生成
1 用word2vec.py生成embding文件和dictionary和reverse_dictionary的json文件,用于后面的RNN网络的训练
2 tune_new.png是生成的embding的图形表示,从图中可以看出有相近意义的词聚集在一起,比如数字、江河湖海、树枝叶等。
三 训练和验证的输出
训练的输出:第一次的epoch效果不好。
2018-07-22 11:59:06,213 - DEBUG - train.py:69 - step [19810] loss [6.324162483215332]
2018-07-22 11:59:06,981 - DEBUG - train.py:69 - step [19820] loss [6.029458045959473]
Data size 1903073
################ eval ################
/Users/jiangt/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 ==
2018-07-22 11:59:10.653908: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-07-22 11:59:11,361 - DEBUG - sample.py:41 - Initialized
INFO:tensorflow:Restoring parameters from ./edwin_rnn_log/model.ckpt-19820
2018-07-22 11:59:11,368 - INFO - tf_logging.py:116 - Restoring parameters from ./edwin_rnn_log/model.ckpt-19820
2018-07-22 11:59:11,414 - DEBUG - sample.py:46 - restore from [./edwin_rnn_log/model.ckpt-19820]
2018-07-22 11:59:11,691 - DEBUG - sample.py:81 - ==============[江神子]==============
2018-07-22 11:59:11,691 - DEBUG - sample.py:82 - 江神子一里一风。UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNKUNKUNKUNK刘翁UNKUNKUNK
2018-07-22 11:59:11,843 - DEBUG - sample.py:81 - ==============[蝶恋花]==============
2018-07-22 11:59:11,843 - DEBUG - sample.py:82 - 蝶恋花UNKUNKUNKUNKUNKUNK刘翁UNKUNK水调歌头(寿)UNKUNK一风风雨,一风风雨,一风风雨。一风风雨,一风风雨,一风风水。UNKUNKUNKUNKUNKUNK刘UNKUNKUNK刘刘UNKUNKUNK
2018-07-22 11:59:11,995 - DEBUG - sample.py:81 - ==============[渔家傲]==============
2018-07-22 11:59:11,995 - DEBUG - sample.py:82 - 渔家傲一里一风。UNKUNKUNKUNKUNKUNK刘翁UNKUNK水调歌头(寿)UNKUNK一风一里,一风风雨,一风风雨。一风风、一里春风,一风风雨,一风□。UNKUNKUNKUNKUNKUNK刘
训练到第四个epoch的输出:
2018-07-22 14:45:37,685 - DEBUG - train.py:69 - step [118920] loss [4.940941333770752]
2018-07-22 14:45:42,307 - DEBUG - sample.py:81 - ==============[江神子]==============
2018-07-22 14:45:42,307 - DEBUG - sample.py:82 - 江神子UNKUNKUNKUNKUNKUNK刘人UNKUNK水调歌头(寿刘守)UNKUNK一笑一年日,一笑不如今。一年一笑,一年一笑一年秋。一笑一年今日,一笑天涯一笑,一笑不如
2018-07-22 14:45:42,457 - DEBUG - sample.py:81 - ==============[蝶恋花]==============
2018-07-22 14:45:42,457 - DEBUG - sample.py:82 - 蝶恋花UNKUNKUNKUNKUNKUNK刘人UNKUNK水调歌头(寿刘守)UNKUNK一笑一年日,一笑不如今。一年一笑,一年一笑一年秋。一笑一年今日,一笑天涯一笑,一笑不如
2018-07-22 14:45:42,607 - DEBUG - sample.py:81 - ==============[渔家傲]==============
2018-07-22 14:45:42,607 - DEBUG - sample.py:82 - 渔家傲UNKUNKUNKUNKUNKUNK刘人UNKUNK水调歌头(寿刘守)UNKUNK一笑一年日,一笑不如今。一年一笑,一年一笑一年秋。一笑一年今日,一笑天涯一笑,一笑不如
################ train ################
四 对RNN的理解
RNN是最早用于自然语言处理的神经网络。RNN与FNN的不同之处在于隐含层各个神经元之间是相互连接的,隐含层的输入包括正常输入和反馈输入(也就是上一个时刻隐含层的输出反馈个下一个时刻隐含层的输入),其他结构和BP神经网络相似.简单的循环神经网络由一个输入层、输出层和一个隐藏层组成。多个输入分配多个权重矩阵,权重代表的是各个输入在网络中的占比,并通过损失函数(交叉熵)的计算,来不断减少实际输出与预测输出之间的误差。
五 练习中训练步骤的描述:
1 先用word2vec.py生成word embding和两个json数据集文件,用于后面的RNN网络的训练。
2 在model中定义RNN网络的模型,用到了tf.nn.rnn_cell.BasicLSTMCell,tf.nn.rnn_cell.DropoutWrapper和tf.nn.rnn_cell.MultiRNNCell三个API。
3 输入数据为data,使用dynamic_rnn方法,创建一个递归神经网络:
outputs_tensor,final_state=tf.nn.dynamic_rnn(cell,data,initial_state=self.state_tenso)
4 构建Skip-gram模型预测。使用tf.truncated_normal函数初始化权重W,使用nce_loss函数计算学习出的词向量embeddings在训练数据上的loss;使用tf.train.GradientDescentOptimize函数构建SGD优化器