没有合适的资源?快使用搜索试试~ 我知道了~
自用自用笔记自用自用笔记自用自用笔记自用自用笔记自用自用笔记
需积分: 0 1 下载量 96 浏览量
2023-11-26
21:08:24
上传
评论
收藏 53.62MB PDF 举报
温馨提示
试读
1276页
自用自用笔记自用自用笔记自用自用笔记自用自用笔记自用自用笔记
资源推荐
资源详情
资源评论
唐宇迪项目笔记
第二章 递归神经网络
1 什么是递归神经网络
(1条消息) 【深度学习】递归神经网络
变参递归神经网络
余思荷的博客-CSDN博客
(1条消息) 如何从RNN起步,一步一步通俗理解LSTM_lstm网络_v_JULY_v的博客-CSDN博客
(1条消息) 循环和递归神经网络
递归神经网络与循环神经网络
zoe_cf的博客-CSDN博客
因为神经网络有递归关系,所以会产生时间变量(第二次迭代必定在第一次迭代之后)
每次迭代有时间节点关系,一般我们只选最后一层的输出结果
CNN:计算机视觉
RNN:自然语言处理:因为词语有先后顺序
2 LSTM网络
因为RNN网络的记忆能力太强了,每次的迭代全部记忆,最后的结果会把前面全部的结果全部考虑进
来,考虑问题就不再精确,会导致模型训练的误差,LSTM网络应运而生
LSTM网络是将信息进行遗忘
3 自然语言处理-词向量模型-Word2Vec
让计算机更好的认识文本:有些词出现的比较近,在词向量空间上比较一致(比如足球,篮球)
第三章 pytorch核心框架
LSTM实战训练
完整代码
import time
import torch
import numpy as np
from train_eval import train, init_network
from importlib import import_module
import argparse
from tensorboardX import SummaryWriter
# --model TextCNN
parser = argparse.ArgumentParser(description='Chinese Text Classification')
parser.add_argument('--model', type=str, required=True, help='choose a
model: TextCNN, TextRNN, FastText, TextRCNN, TextRNN_Att, DPCNN,
Transformer')
parser.add_argument('--embedding', default='pre_trained', type=str,
help='random or pre_trained')
parser.add_argument('--word', default=False, type=bool, help='True for
word, False for char')
1
2
3
4
5
6
7
8
9
10
11
12
13
东北大学视觉实验室ydp
python 回顾
https://blog.csdn.net/xiaoxianer321/article/
details/116723566?ops_request_misc=%257B%2522request
%255Fid%2522%253A%
2522169904160916800226521743%2522%252C%2522scm
%2522%253A%252220140713.130102334..%2522%
257D&request_id=169904160916800226521743&biz_id=0&
utm_medium=distribute.pc_search_result.none-task-
blog-2~all~sobaiduend~default-11-116723566-null-
null.142^v96^pc_search_result_base7&utm_term=python&sp
m=1018.2226.3001.4187
args = parser.parse_args()
if __name__ == '__main__':
dataset = 'THUCNews' # 数据集
# 搜狗新闻:embedding_SougouNews.npz, 腾讯:embedding_Tencent.npz, 随机初始
化:random 都是文件名字 embedding 嵌入初始文件
embedding = 'embedding_SougouNews.npz'
if args.embedding == 'random':
embedding = 'random'
model_name = args.model #TextCNN, TextRNN,
if model_name == 'FastText':
from utils_fasttext import build_dataset, build_iterator,
get_time_dif
embedding = 'random'
else:
# utils 加载数据集分词什么的
from utils import build_dataset, build_iterator, get_time_dif
# 加载数据
x = import_module('models.' + model_name)
config = x.Config(dataset, embedding)
#随机数种子
np.random.seed(1)
torch.manual_seed(1)
torch.cuda.manual_seed_all(1)
torch.backends.cudnn.deterministic = True # 保证每次结果一样
start_time = time.time()
print("Loading data...")
# 做数据预处理
vocab, train_data, dev_data, test_data = build_dataset(config,
args.word)
train_iter = build_iterator(train_data, config)
dev_iter = build_iterator(dev_data, config)
test_iter = build_iterator(test_data, config)
time_dif = get_time_dif(start_time)
print("Time usage:", time_dif)
# train
config.n_vocab = len(vocab)
model = x.Model(config).to(config.device)
writer = SummaryWriter(log_dir=config.log_path + '/' +
time.strftime('%m-%d_%H.%M', time.localtime()))
if model_name != 'Transformer':
init_network(model)
print(model.parameters)
# 训练模型
train(config, model, train_iter, dev_iter, test_iter,writer)
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
东北大学视觉实验室ydp
parser.paese.parse_args()
utils文件 加载数据集
调试时候,运行到某一行然后进行点击会有,然后进入textRNN后在model里面打断点运行到某处的
init_和call处时候断点
dataset 文件夹名字,embeeding名字,config配置参数的问题,加载数据等(里面有数据)vocab词汇
的意思
train_eval
# --model TextCNN default表示的是默认配置
# --model是文字,help里面会有需要填的一切,点击右上角run会增加配置即可
parser = argparse.ArgumentParser(description='Chinese Text Classification')
parser.add_argument('--model', type=str, required=True, help='choose a
model: TextCNN, TextRNN, FastText, TextRCNN, TextRNN_Att, DPCNN,
Transformer')
parser.add_argument('--embedding', default='pre_trained', type=str,
help='random or pre_trained')
parser.add_argument('--word', default=False, type=bool, help='True for
word, False for char')
args = parser.parse_args()
1
2
3
4
5
6
7
8
9
10
else:
# utils 加载数据集分词什么的
from utils import build_dataset, build_iterator, get_time_dif
1
2
3
# coding: UTF-8
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
from sklearn import metrics
import time
from utils import get_time_dif
from tensorboardX import SummaryWriter
# 权重初始化,默认xavier
def init_network(model, method='xavier', exclude='embedding', seed=123):
for name, w in model.named_parameters():
if exclude not in name:
if 'weight' in name:
if method == 'xavier':
nn.init.xavier_normal_(w)
elif method == 'kaiming':
nn.init.kaiming_normal_(w)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
东北大学视觉实验室ydp
else:
nn.init.normal_(w)
elif 'bias' in name:
nn.init.constant_(w, 0)
else:
pass
def train(config, model, train_iter, dev_iter, test_iter,writer):
start_time = time.time()
model.train()
optimizer = torch.optim.Adam(model.parameters(),
lr=config.learning_rate)
# 学习率指数衰减,每次epoch:学习率 = gamma * 学习率
# scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer,
gamma=0.9)
total_batch = 0 # 记录进行到多少batch
dev_best_loss = float('inf')
last_improve = 0 # 记录上次验证集loss下降的batch数
flag = False # 记录是否很久没有效果提升
#writer = SummaryWriter(log_dir=config.log_path + '/' +
time.strftime('%m-%d_%H.%M', time.localtime()))
for epoch in range(config.num_epochs):
print('Epoch [{}/{}]'.format(epoch + 1, config.num_epochs))
# scheduler.step() # 学习率衰减
for i, (trains, labels) in enumerate(train_iter):
#print (trains[0].shape)
outputs = model(trains)
model.zero_grad()
loss = F.cross_entropy(outputs, labels)
loss.backward()
optimizer.step()
if total_batch % 100 == 0:
# 每多少轮输出在训练集和验证集上的效果
true = labels.data.cpu()
predic = torch.max(outputs.data, 1)[1].cpu()
# accuracy 准确率 调库
train_acc = metrics.accuracy_score(true, predic)
dev_acc, dev_loss = evaluate(config, model, dev_iter)
if dev_loss < dev_best_loss: # 判断损失是最好的模型
dev_best_loss = dev_loss
torch.save(model.state_dict(), config.save_path)
improve = '*'
last_improve = total_batch
else:
improve = ''
time_dif = get_time_dif(start_time)
msg = 'Iter: {0:>6}, Train Loss: {1:>5.2}, Train Acc:
{2:>6.2%}, Val Loss: {3:>5.2}, Val Acc: {4:>6.2%}, Time: {5} {6}'
print(msg.format(total_batch, loss.item(), train_acc,
dev_loss, dev_acc, time_dif, improve))
writer.add_scalar("loss/train", loss.item(), total_batch)
writer.add_scalar("loss/dev", dev_loss, total_batch)
writer.add_scalar("acc/train", train_acc, total_batch)
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
东北大学视觉实验室ydp
.pth文件是保存好的模型数据
writer.add_scalar("acc/dev", dev_acc, total_batch)
model.train()
total_batch += 1
if total_batch - last_improve > config.require_improvement:
# 验证集loss超过1000 batch没下降,结束训练
print("No optimization for a long time, auto-stopping...")
flag = True
break
if flag:
break
writer.close()
test(config, model, test_iter)
# 测试集数据
def test(config, model, test_iter):
# test
model.load_state_dict(torch.load(config.save_path))
model.eval()
start_time = time.time()
test_acc, test_loss, test_report, test_confusion = evaluate(config,
model, test_iter, test=True)
msg = 'Test Loss: {0:>5.2}, Test Acc: {1:>6.2%}'
print(msg.format(test_loss, test_acc))
print("Precision, Recall and F1-Score...")
print(test_report)
print("Confusion Matrix...")
print(test_confusion)
time_dif = get_time_dif(start_time)
print("Time usage:", time_dif)
def evaluate(config, model, data_iter, test=False):
model.eval()
loss_total = 0
predict_all = np.array([], dtype=int)
labels_all = np.array([], dtype=int)
with torch.no_grad():
for texts, labels in data_iter:
outputs = model(texts)
loss = F.cross_entropy(outputs, labels)
loss_total += loss
labels = labels.data.cpu().numpy()
predic = torch.max(outputs.data, 1)[1].cpu().numpy()
labels_all = np.append(labels_all, labels)
predict_all = np.append(predict_all, predic)
acc = metrics.accuracy_score(labels_all, predict_all)
if test:
report = metrics.classification_report(labels_all, predict_all,
target_names=config.class_list, digits=4)
confusion = metrics.confusion_matrix(labels_all, predict_all)
return acc, loss_total / len(data_iter), report, confusion
return acc, loss_total / len(data_iter)
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
东北大学视觉实验室ydp
剩余1275页未读,继续阅读
资源评论
ydp15755423176
- 粉丝: 102
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- anaconda mac安装包
- 简单介绍Scratch到python.docx
- 毕业设计基于LabView+MATLAB的说话人识别系统源码.zip
- 基于solr和协同过滤算法的构件检索与推荐系统+源代码+文档说明
- 详细描述了Delphi多线程编程,超级简单易懂
- 基于Pyqt5设计简易版水果识别系统源码.zip
- 课程设计基于Labview的转子动平衡测控系统源码+文档说明.zip
- mysql node.js 基于协同过滤美食推荐系统-数据库+源代码+文档说明
- 两种MovieLens数据集上电影推荐 三种协同过滤(item user svd分解)+源代码+文档说明
- excel.js插件可应用于微信小程序,H5对xlxs文件的操作
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功