week4(2021.10.9~2021.10.15)

2023-11-28 23:40
文章标签 15 2021.10 week4

本文主要是介绍week4(2021.10.9~2021.10.15),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Step1 总结

Step2 接上周Step6的 (未完待续)

三.文本情感分类

        1.数据集的准备    2.模型构建   3.模型训练   4.模型评估

# 数据准备
import torch
from torch.utils.data import DataLoader, Dataset
import os
import redef tokenlize(content):content = re.sub("<.*?>", " ", content)fileters = ["\.", '\t', '\n', '\x97', '\x96', '#', '$', '%', '&']content = re.sub("|".join(fileters), " ", content)tokens = [i.strip().lower() for i in content.split()]return tokensclass ImdbDataset(Dataset):def __init__(self, train=True):self.train_data_path = r"D:\1aaa_aa\aclImdb_v1\aclImdb\train"self.test_data_path = r"D:\1aaa_aa\aclImdb_v1\aclImdb\test"data_path = self.train_data_path if train else self.test_data_path# 把所有的文件名放入列表# pos和neg是 train下面的文件夹,放到这个列表里temp_data_path = [os.path.join(data_path, "pos"), os.path.join(data_path, "neg")]self.total_file_path = []  # 所有的评论文件的路径for path in temp_data_path:file_name_list = os.listdir(path)file_path_list = [os.path.join(path, i) for i in file_name_list if i.endswith(".txt")]self.total_file_path.extend(file_path_list)def __getitem__(self, index):file_path = self.total_file_path[index]# 获取labellabel_str = file_path.split("\\")[-2]label = 0 if label_str == "neg" else 1# 获取内容tokens = tokenlize(open(file_path).read())return tokens, labelprint(label_str)def __len__(self):return len(self.total_file_path)def get_dataloader(train=True):imdb_dataset = ImdbDataset(train)data_loader = DataLoader(imdb_dataset, batch_size=2, shuffle=True)return data_loaderif __name__ == '__main__':for idx, (input, target) in enumerate(get_dataloader()):print(idx)print(input)print(target)break

添加collate fn(加入collate_fn类,修改get_dataloader类)

def collate_fn(batch):content, label = list(zip(*batch))return content, labeldef get_dataloader(train=True):imdb_dataset = ImdbDataset(train)data_loader = DataLoader(imdb_dataset, batch_size=2, shuffle=True,
collate_fn=collate_fn)return data_loader

Step3 逻辑回归

import torch
import matplotlib.pyplot as plt
import torch.nn as nn
from torch.optim import SGDimport os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 生成一批数据样本,并分为2类
cluster = torch.ones(500, 2)              # 生成 500行 2列 元素值为1 的张量
data0 = torch.normal(4 * cluster, 2)      # 设置data0为均值4,标准差2的正态分布(就是让500行2列的张量数据服从规定的正态分布)
data1 = torch.normal(-4 * cluster, 2)
label0 = torch.zeros(500)                 # 500个0的数组(一维张量)
label1 = torch.ones(500)x = torch.cat((data0, data1), ).type(torch.FloatTensor)                    # data0和data1拼接在一起,竖着拼,同时维度增加。也可以写成torch.cat((A,B),0)   另一种:torch.cat((A,B),1)就是横着拼
y = torch.cat((label0, label1), ).type(torch.LongTensor)plt.scatter(x.numpy()[:, 0], x.numpy()[:, 1], c=y.numpy(), s=10, lw=0, cmap='RdYlGn')   # X[:,0]就是取所有行的第0个数据,  X[:,1]就是取所有行的第1个数据
plt.show()                                                                              #  c=y.numpy()是将y转化为数组(降维)# s代表每个点的粗细,lw是每个点所占面积的大小,cmap是颜色设置
# 定义神经网络Net
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.linear = nn.Linear(2, 2)  # 2,2表示输入二维张量大小,输出二维张量大小def forward(self, x):x = self.linear(x)x = torch.sigmoid(x)return xinputs = x
target = y# 优化器:随机梯度下降
net = Net()
optimizer = SGD(net.parameters(), 0.02)  # 学习率lr为0.02
criterion = nn.CrossEntropyLoss()  # 交叉熵函数def draw(output):output = torch.max((output), 1)[1]           #output = torch.max(input, dim), input是输入的tensor,dim(0/1)是每列/行的最大值,输出1.每行最大值并构成数组 2.输出索引(即第几列的数) [1]代表了2.输出索引pred_y = output.data.numpy().squeeze()       #可以删除数组形状中的单维度条目,即把shape中为1的维度去掉target_y = y.numpy()plt.scatter(x.numpy()[:, 0], x.numpy()[:, 1], c=y.numpy(), s=10, lw=0, cmap='RdYlGn')  #前边已经解释了accuracy = sum(pred_y == target_y) / 1000.0    #表示一个bool数组,如果预测类别和样本类别相同,该位置置1,否则置0   除以1000后,accuracy就表示精度了plt.text(1.5, -4, 'Accuracy=%s' % (accuracy), fontdict={'size': 20, 'color': 'red'})     #打印出精度值,设定参数plt.pause(0.1)                               #暂停0.1秒#训练模型
def train(model, criterion, optimizer, epochs):    #定义训练(神经网络,交叉熵函数,优化器模型,循环次数)for epoch in range(epochs):output = model(inputs)              #定义output,来自model(也就是run),inputs是x(前边有提到)loss = criterion(output, target)    #定义损失函数(交叉熵函数)optimizer.zero_grad()               #清零loss.backward()                     #反向传播optimizer.step()                    #前向传播if epoch % 40 == 0:draw(output)                    #运行draw类train(net, criterion, optimizer, 1000)

一.解释代码

二.运行结果

几个模糊的概念解析:

        1.深度学习中关于张量的阶、轴和形状的解释​​​​​​深度学习中关于张量的阶、轴和形状的解释 | Pytorch系列(二) - 云+社区 - 腾讯云 (tencent.com)

        2.nn.Linear()解释

PyTorch的nn.Linear()详解 - douzujun - 博客园 (cnblogs.com).

        3.numpy 数组X[:,0]和X[:,1]的详解

numpy 数组X[:,0]和X[:,1]的详解_doubledog1112的专栏-CSDN博客

        4.Pytorch中的torch.cat()函数

Pytorch中的torch.cat()函数_荷叶田田-CSDN博客_python torch.cat

        5.zeros()函数

zeros() 函数——MATLAB - 坤元居士 - 博客园 (cnblogs.com)

        6.torch.normal()的用法

torch.normal()的用法_小乌坞的博客-CSDN博客

        7.torch.optim 优化器

PyTorch 笔记(18)— torch.optim 优化器的使用_wohu1104的专栏-CSDN博客

        8.torch.max()使用

torch.max()使用讲解 - 简书 (jianshu.com)

这篇关于week4(2021.10.9~2021.10.15)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/430638

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

15 组件的切换和对组件的data的使用

划重点 a 标签的使用事件修饰符组件的定义组件的切换:登录 / 注册 泡椒鱼头 :微辣 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-

java基础总结15-面向对象11(抽象类)

下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:public abstract void enjoy();   从某种意义上来说,抽象方法就是被用来重写的,所以在父类声明的抽象方法一定要在子类里面重写。如果真的不想在子类里面重写这个方法,那么可以再在子类里

15年亚洲区长春站赛后总结

刷题打比赛的日子才叫青春   今年和ljy、lsj组队去长春站。这支队伍是我很放心的一支队伍,ljy可以做数学题和复杂思维题,lsj思维缜密可以和ljy对思路,我负责手速狗+模板暴力流。 有了去年两场亚洲区的经验,心态有了很大变化,也深知赛场上风云莫测,不至最后一分钟,仍未分胜负。开场的F题卡了很久,WA了很多发,这种复杂思维题丢给ljy和lsj搞了。我去开L题,给LJY说完题意后,他给

找不同-第15届蓝桥省赛Scratch初级组真题第4题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第183讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。 第15届蓝桥杯省赛已于2024年8月24日落下帷幕,编程题一共有5题,分别如下: 猪八戒落地 游乐场 画西瓜 找不同 消

PHP 验证身份号码 包括15位18位

查了很多资料 发现网上身份证15位的验证并不是那么严谨  今天研究了一下  代码如下 <?phpfunction check_id_card($num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return fa

CSS学习15--元素的显示与隐藏

元素的显示与隐藏 前言一、display显示二、visibility可见性三、overflow溢出 前言 CCS中有三个显示和隐藏的单词比较常见,分别是display visibility和overflow。 他们的主要目的是让一个元素在页面中消失,但是不在文档源码中删除。最常见的是网站广告。 一、display显示 display设置或者检索对象是否以及如何显示。使用更多

15个多线程相关的面试题

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! By 大数据技术与架构 场景描述:Java并发编程问题是面试过程中很容易遇到的问题,提前准备是解决问题的最好办法,将试题总结起来,时常查看会有奇效。 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,