PyCharm安装torch以及pytorch-pretrained-bert简单使用

PyCharm安装torch以及pytorch-pretrained-bert简单使用安装torch运行Pycharm中的代码时候提示ModuleNotFoundError:Nomodulenamed‘torch’。试了很多种方法都不行,然后进入官网查了下具体的安装方法,附上网址https://pytorch.org/get-started/previous-versions/。摘取一段放在这里供大家参考。#CUDA10.0pipinstalltorch===1.2.0torchvision===0.4.0-fhttps://download.pytorc

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目录

安装torch

pytorch-pretrained-bert简单使用


安装torch

运行Pycharm中的代码时候提示ModuleNotFoundError: No module named ‘torch’。试了很多种方法都不行,然后进入官网查了下具体的安装方法,附上网址https://pytorch.org/get-started/previous-versions/。
摘取一段放在这里供大家参考。

# CUDA 10.0
pip install torch===1.2.0 torchvision===0.4.0 -f https://download.pytorch.org/whl/torch_stable.html

# CUDA 9.2
pip install torch==1.2.0+cu92 torchvision==0.4.0+cu92 -f https://download.pytorch.org/whl/torch_stable.html

# CPU only
pip install torch==1.2.0+cpu torchvision==0.4.0+cpu -f https://download.pytorch.org/whl/torch_stable.html

pytorch-pretrained-bert简单使用

从下载模型权重开始

# 切换到你的anaconda gpu 环境
# source activate 你的conda环境名称
​
# 安装加载预训练模型&权重的包
pip install pytorch-pretrained-bert

接着就是下载模型权重文件了,pytorch-pretrained-bert官方下载地址太慢了…,推荐去kaggle下载L-12_H-768-A-12 uncase版本,下载地址在这里,里面有两个文件,都下载下来,并把模型参数权重的文件bert-base-uncased解压出来,然后放在你熟悉的硬盘下即可。

加载模型试试

from pytorch_pretrained_bert import BertModel, BertTokenizer
import numpy as np
import torch

# 加载bert的分词器
tokenizer = BertTokenizer.from_pretrained('E:/Projects/bert-pytorch/bert-base-uncased-vocab.txt')
# 加载bert模型,这个路径文件夹下有bert_config.json配置文件和model.bin模型权重文件
bert = BertModel.from_pretrained('E:/Projects/bert-pytorch/bert-base-uncased/')

s = "I'm not sure, this can work, lol -.-"

tokens = tokenizer.tokenize(s)
print("\\".join(tokens))
# "i\\'\\m\\not\\sure\\,\\this\\can\\work\\,\\lo\\##l\\-\\.\\-"
# 是否需要这样做?
# tokens = ["[CLS]"] + tokens + ["[SEP]"]

ids = torch.tensor([tokenizer.convert_tokens_to_ids(tokens)])
print(ids.shape)
# torch.Size([1, 15])

result = bert(ids, output_all_encoded_layers=True)
print(result)

没问题,那么bert返回给我们了什么呢?

result = (
    [encoder_0_output, encoder_1_output, ..., encoder_11_output], 
    pool_output
)
  1. 因为我选择了参数output_all_encoded_layers=True,12层Transformer的结果全返回了,存在第一个列表中,每个encoder_output的大小为[batch_size, sequence_length, hidden_size];
  2. pool_out大小为[batch_size, hidden_size],pooler层的输出在论文中描述为:
    which is the output of a classifier pretrained on top of the hidden state associated to the first character of the input (CLS) to train on the Next-Sentence task (see BERT’s paper).
    也就是说,取了最后一层Transformer的输出结果的第一个单词[cls]的hidden states,其已经蕴含了整个input句子的信息了。
  3. 如果你用不上所有encoder层的输出,output_all_encoded_layers参数设置为Fasle,那么result中的第一个元素就不是列表了,只是encoder_11_output,大小为[batch_size, sequence_length, hidden_size]的张量,可以看作bert对于这句话的表示。

用bert微调我们的模型

将bert嵌入我们的模型即可。

class CustomModel(nn.Module):
    
    def __init__(self, bert_path, n_other_features, n_hidden):
        super().__init__()
        # 加载并冻结bert模型参数
        self.bert = BertModel.from_pretrained(bert_path)
        for param in self.bert.parameters():
            param.requires_grad = False
        self.output = nn.Sequential(
            nn.Dropout(0.2),
            nn.Linear(768 + n_other_features, n_hidden),
            nn.ReLU(),
            nn.Linear(n_hidden, 1)
        )
    def forward(self, seqs, features):
        _, pooled = self.bert(seqs, output_all_encoded_layers=False)
        concat = torch.cat([pooled, features], dim=1)
        logits = self.output(concat)
        return logits

测试:

s = "I'm not sure, this can work, lol -.-"
​
tokens = tokenizer.tokenize(s)
ids = torch.tensor([tokenizer.convert_tokens_to_ids(tokens)])
# print(ids)
# tensor([[1045, 1005, 1049, 2025, 2469, 1010, 2023, 2064, 2147, 1010, 8840, 2140,
#         1011, 1012, 1011]])
​
model = CustomModel('你的路径/bert-base-uncased/',10, 512)
outputs = model(ids, torch.rand(1, 10))
# print(outputs)
# tensor([[0.1127]], grad_fn=<AddmmBackward>)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175034.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前景背景样本不均衡解决方案:Focal Loss,GHM与PISA(附python实现代码)

    前景背景样本不均衡解决方案:Focal Loss,GHM与PISA(附python实现代码)参考文献 ImbalancePro AReview1 定义在前景 背景类别不平衡中 背景占有很大比例 而前景的比例过小 这类问题是不可避免的 因为大多数边界框都是由边界标记为背景 即否定 类框匹配和标签模块如图 4 a 所示 一般来说 前景背景不均衡现象出现在训练期间 它不依赖于数据集中每个类的样本的个数 因为但对于样本来说 它不包含前景和背景的任何相关信息 2 解决方案我们可以将前景背景类不平衡的解决方案分为四类 i 硬采样方法 i

    2025年9月5日
    3
  • Pycharm设置自动代码提示(超详细)

    Pycharm设置自动代码提示(超详细)【前言】最近在使用pycharm这款编译器的时候,发现在学习python过程中没有代码提示就很烦,所以网上收集资料加上自身的实践总结出以下方法如何在pycharm中设置代码提示。【步骤一】起初看到网上很多教程都是这样点击File然后将PowerSaveMode旁边的√去掉就可以,实际上确实是这样的,当我们敲代码的时候比如import就会有自动提示。【注意】但是可能有些小伙伴按照这样的提示可是还是不显示代码自动提示,为什么会这样呢,原因是你的Python环境没有配置好,我们按照下面

    2022年8月25日
    8
  • 2014—多校训练2(ZCC Loves Codefires)

    2014—多校训练2(ZCC Loves Codefires)

    2021年8月31日
    57
  • Mysql truncate 清空表数据「建议收藏」

    Mysql truncate 清空表数据「建议收藏」truncate:清空指定表中的所有数据,并将表恢复到”初始状态”,就跟刚创建的表一样。truncate表名;测试数据:mysql>select*fromtest;+—-+——-+——+——+|id|name|sex|age|+—-+——-+——+——+|1|name1|男|5||2|name2|女|10||3|name..

    2022年5月30日
    39
  • MCS-51单片机原理_51单片机的基本结构

    MCS-51单片机原理_51单片机的基本结构MCS-51单片机结构及原理MCS-51单片机结构MCS-51单片机的内部结构MCS-51引脚及功能MCS-51的存储器结构存储器划分方法程序存储器数据存储器单片机的复位、时钟与时序复位与复位电路MCS-51单片机结构MCS-51单片机的内部结构SCM——将通用微计算机基本功能部件集成在一块芯片上构成的一种专用微计算机系统80C51=(1×8)CPU+128BRAM+4KBROM+……

    2022年9月27日
    2
  • 微信地位,牢不可破?

    微信地位,牢不可破?作者|李楠本文经授权转自新浪科技QQ与微信接连称霸社交赛道20年后,新的临界点似乎已经到来。回看2019的社交市场,新产品持续推出。截至目前,阿里巴巴、字节跳动、百度、京东、网易、搜狐等新老巨头纷纷入局,映客8500万美元收购积目引起热议,以“灵魂”做标签的Soul崭露头角。有专家向新浪科技表示,00后群体正在崛起,其对社交网络的需求有所差别,这群主力军不一定热衷于微…

    2022年5月14日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号