- 博客(38)
- 收藏
- 关注
原创 学习笔记
2020-11-15:在运行TRADE代码过程中可能出现:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 解决方案,不是在训练刚开始时遇到,而是训练了若干个epoch之后,出现上述错误。通过torch.backends.cudnn.enabled = False不使用cudnn加速...
2020-11-15 17:46:39
243
1
原创 Pytorch中的backward以及optimize
loss.backward():计算loss对于模型中各个requires_grad=True的参数的梯度值optimizer.step():根据计算得到的梯度值,更新模型中的参数只有loss.backward之后,参数的grad才有值,否则为None;optimizer.zero_grad() :将模型中所有参数的梯度值清零...
2020-11-15 17:44:02
621
原创 RuntimeError: cuda runtime error (59) : device-side assert triggered
在跑SOM-DST模型的时候,出现了以下错误:1 block: [0,0,0], thread: [16,0,0] Assertion t >= 0 && t < n_classes failed.2 RuntimeError: cuda runtime error (59) : device-side assert triggered解决方法:每次运行时删除上次运行生成的__pycache__文件。...
2020-10-21 15:23:47
374
转载 训练网络交叉熵loss突然出现nan的情况
尝试在MNIST上跑AlexNet,然而发现loss一直下降的时候,在某一时刻突然出现了nan。在tensorboard上显示如下:可以看到在最后面的accuarcy突然下降。一开始百思不得其解,原因其实在于交叉熵中的 y_truth * log(y_predict)log(0) * 0的时候, 则会出现NaN,一旦出现这个情况,网络训练结果必然完蛋解决办法其实也很简单:在交叉熵的公式中加入一个比较小的数: ...
2020-10-05 13:45:40
1817
1
转载 Transformer学习记录
1. 模型结构模型结构如下图:和大多数seq2seq模型一样,transformer的结构也是由encoder和decoder组成。1.1 EncoderEncoder由N=6个相同的layer组成,layer指的就是上图左侧的单元,最左边有个“Nx”,这里是x6个。每个Layer由两个sub-layer组成,分别是multi-head self-attention mechanism和fully connected feed-forward network。其中每个sub-layer都加了resi
2020-09-16 22:28:35
180
原创 StanfordCoreNLP的安装,使用及各词性表示含义
环境Installationpip install stanfordcorenlpExample# Simple usagefrom stanfordcorenlp import StanfordCoreNLPnlp = StanfordCoreNLP(r'G:\JavaLibraries\stanford-corenlp-full-2018-02-27')sentence = 'Guangdong University of Foreign Studies is located in
2020-08-23 14:01:27
449
转载 [Pytorch函数]CrossEntropyLoss()
引言在使用pytorch深度学习框架,计算损失函数的时候经常会遇到这么一个函数:nn.CrossEntropyLoss() 该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的。在训练过程中,对于每个类分配权值,可选的参数权值应该是一个1D张量。当你有一个不平衡的训练集时,这是是非常有用的。那么针对这个函数,下面将做详细的介绍。什么是交叉熵?交叉熵主要是用来判定实际的输出与期望的输出的接近程度,为什么这么说呢,举个例子:在
2020-07-20 10:40:08
332
转载 [Pytorch函数].requires_grad固定部分参数进行网络训练
1. 只训练部分层class RESNET_attention(nn.Module): def __init__(self, model, pretrained): super(RESNET_attetnion, self).__init__() self.resnet = model(pretrained) for p in self.parameters(): p.requires_grad = False
2020-07-20 10:13:24
10910
转载 [Pytorch函数]loss,loss.cpu().data 及 loss.cpu().detach().numpy()等辨析
print('1111',loss)print('2222',loss.data)#tensor且GPUprint('3333',loss.cpu())print('4444',loss.cpu().data)#tensor且CPU# print('5555',loss.cpu().data[0])#报错 IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Pyth
2020-07-20 10:04:43
4762
1
转载 [Python函数]tolist()
将数组或者矩阵转换成列表,如下:>>> from numpy import *>>> a1 = [[1,2,3],[4,5,6]] #列表>>> a2 = array(a1) #数组>>> a2array([[1, 2, 3], [4, 5, 6]])>>> a3 = mat(a1) #矩阵>>> a3matrix([[1, 2, 3], [4, 5, 6
2020-07-20 10:00:38
693
转载 [Python函数]nonzero()
举个栗子说明一下nonzero()函数的用法:首先构建一个简单的矩阵:from numpy import *a = mat([[1,1,0],[1,1,0],[1,0,3]])print(a)输出结果如下图:print(a.nonzero())(array([0, 0, 1, 1, 2, 2]), array([0, 1, 0, 1, 0, 2]))第一个array表示非零元素所在的行,第二个array表示非零元素所在的列,分别取对应位置的值组成非零元素的坐标print(len(a
2020-07-20 09:35:29
358
转载 [Pytorch函数]torch.sum
torch.sum()对输入的tensor数据的某一维度求和,一共两种用法1.torch.sum(input, dtype=None)2.torch.sum(input, list: dim, bool: keepdim=False, dtype=None) → Tensor input:输入一个tensordim:要求和的维度,可以是一个列表keepdim:求和之后这个dim的元素个数为1,所以要被去掉,如果要保留这个维度,则应当keepdim=True#If keepdim is True
2020-07-20 09:28:46
3428
转载 [Pytorch函数]torch.cat
cat是concatnate的意思:拼接,联系在一起。先说cat( )的普通用法如果我们有两个tensor是A和B,想把他们拼接在一起,需要如下操作:C = torch.cat( (A,B),0 ) #按维数0拼接(竖着拼)C = torch.cat( (A,B),1 ) #按维数1拼接(横着拼)>>> import torch>>> A=torch.ones(2,3) #2x3的张量(矩阵)
2020-07-20 09:20:38
235
转载 [Pytorch函数]torch.max、F.softmax
在利用torch.max函数和F.Ssoftmax函数时,对应该设置什么维度,总是有点懵,遂总结一下:首先看看二维tensor的函数的例子:import torchimport torch.nn.functional as F input = torch.randn(3,4)print(input)tensor([[-0.5526, -0.0194, 2.1469, -0.2567], [-0.3337, -0.9229, 0.0376, -0.0801],
2020-07-20 09:16:17
1480
转载 [Pytorch函数]DataLoader()
torch.utils.data.DataLoader中的参数:dataset (Dataset) – dataset from which to load the data.batch_size (int, optional) – how many samples per batch to load (default: 1).shuffle (bool, optional) – set to True to have the data reshuffled at every epoch (defa
2020-07-14 12:05:33
1418
转载 [Pytorch函数]常用的normalization函数
归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)、Switchable Normalization(2019年);将输入的图像shape记为[N, C, H, W],这几个方法主要的区别就是在,batchNorm是在batch上,对NHW做归一化,对小batchsize效果不好;layerNorm在
2020-07-11 12:02:02
1268
转载 [Pytorch函数]nn.Embedding.weight
一、nn.Embedding.weight初始化分布nn.Embedding.weight随机初始化方式是标准正态分布 [公式] ,即均值μ=0\mu=0μ=0,方差σ=1\sigma=1σ=1的正态分布。import torch.nn as nn# dim越大,均值、方差越接近0和1dim = 800000# 定义了一个(5, dim)的二维embdding# 对于NLP来说,相当于是5个词,每个词的词向量维数是dim# 每个词向量初始化为正态分布 N(0,1)(待验证)embd = n
2020-07-11 11:38:52
8633
转载 [Numpy函数]numpy.arange()
arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,会python的人肯定经常用range函数,比如在for循环中,几乎都用到了range,下面我们通过range来学习一下arange,两者的区别仅仅是arange返回的是一个数据,而range返回的是list。先引入numpy。arange和range的另一个区别就是使用arange前先引入,range不需要使用一个参数,看看range和arange有什么表现。range返回从0到4的5个数构成的list,而aran
2020-07-11 11:34:26
297
转载 [Numpy函数]numpy.sum()
众所周知,sum不传参的时候,是所有元素的总和。这里就不说了。假设我生成一个numpy数组a,如下这是一个拥有两维的数组,每一维又拥有三个数组,这个数组里面拥有四个元素。如果我们要将这个a数组中的第一个元素1定位出来,则我们会输入a[0][0][0]。好,这个axis的取值就是这个精确定位某个元素需要经过多少数组的长度,在这里是3,所以axis的取值有0,1,2。如果一个数组精确到某个元素需要a[n0][n1][n2][…][n],则axis的取值就是n。定位到这里,axis的参数的取值就解释完成了。
2020-07-11 11:26:22
463
转载 [Pytorch函数]squeeze()和unsqueeze()
一、unsqueeze()函数首先初始化一个a可以看出a的维度为(2,3)在第二维增加一个维度,使其维度变为(2,1,3)可以看出a的维度已经变为(2,1,3)了,同样如果需要在倒数第二个维度上增加一个维度,那么使用b.unsqueeze(-2)二、squeeze()函数介绍首先得到一个维度为(1,2,3)的tensor(张量)由图中可以看出c的维度为(1,2,3)2.下面使用squeeze()函数将第一维去掉可见,维度已经变为(2,3)3.另外可以看出维度并没有
2020-07-11 11:08:59
250
转载 [Pytorch函数]nn.Linear()
PyTorch的nn.Linear()是用于设置网络中的全连接层的,需要注意的是全连接层的输入与输出都是二维张量,一般形状为[batch_size, size],不同于卷积层要求输入输出是四维张量。其用法与形参说明如下: in_features指的是输入的二维张量的大小,即输入的[batch_size, size]中的size。 out_features指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,output_size],当然,它也代表了该全连接层的神经元个数。 从
2020-07-11 11:03:04
1213
转载 [Pytorch函数] .masked_fill_()
masked_fill_(mask, value)掩码操作用value填充tensor中与mask中值为1位置相对应的元素。mask的形状必须与要填充的tensor形状一致。a = torch.randn(5,6)x = [5,4,3,2,1]mask = torch.zeros(5,6,dtype=torch.float)for e_id, src_len in enumerate(x): mask[e_id, src_len:] = 1mask = mask.to(device
2020-07-11 10:57:25
28822
6
转载 [Python函数]copy()和deepcopy()
>>> import copy>>> origin = [1, 2, [3, 4]]#origin 里边有三个元素:1, 2,[3, 4]>>> cop1 = copy.copy(origin)>>> cop2 = copy.deepcopy(origin)>>> cop1 == cop2True>>> cop1 is cop2False #cop1 和 cop2 看上去相同,但已不
2020-07-10 15:56:32
928
转载 [Python函数]lambda
lambda函数的语法只包含一个语句,如下: lambda arg1,arg2,…argn:expression(主要是看下面的例子)代码示例:#-*- coding:utf-8 -*-#__author__ = "www.iplaypy.com" # 普通python函数def func(a,b,c): return a+b+c print func(1,2,3)# 返回值为6 # lambda匿名函数f = lambda a,b,c:a+b+c print f(
2020-07-10 14:59:16
275
转载 [Pytorch函数].contiguous()
contiguous:view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。一种可能的解释是:有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。判断是否contiguous用torch.Tensor.is_cont
2020-07-10 14:51:15
370
转载 [Pytorch函数]torch.nn.dropout和torch.nn.dropout2d
# -*- coding: utf-8 -*-import torchimport torch.nn as nnimport torch.autograd as autogradm = nn.Dropout(p=0.5)n = nn.Dropout2d(p=0.5)input = autograd.Variable(torch.randn(2, 6, 3)) ## 对dim=1维进行随机置为0print(m(input))print('**************************
2020-07-10 14:48:28
2588
1
转载 [Pytorch函数].repeat()
import torchx = torch.tensor([1, 2, 3])print(x.repeat(4))print("###################################")print(x.repeat(4, 1))运行结果如下:import torchx = torch.tensor([1, 2, 3])print(x.repeat(4, 1))print("###################################")print(x.re
2020-07-10 14:41:46
4822
转载 [Pytorch函数].mul() .mm() .matmul()
一、点乘点乘都是broadcast的,可以用torch.mul(a, b)实现,也可以直接用*实现。>>> a = torch.ones(3,4)>>> atensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])>>> b = torch.Tensor([1,2,3]).reshape((3,1))>>> btensor([
2020-07-10 14:36:56
1615
转载 [Numpy函数].repeat()
np.repeat()用于将numpy数组重复。numpy.repeat(a, repeats, axis=None);参数:axis=0,沿着y轴复制,实际上增加了行数axis=1,沿着x轴复制,实际上增加了列数1. 一维数组重复3次# 随机生成[0, 5)之间的数,形状1行4列,将此数组按y轴重复3次import numpy as nppop = np.random.randint(0, 5, size=(1, 4)).repeat(3, axis=0)print(pop)[[1
2020-07-10 12:25:48
1049
1
转载 [Pytorch函数].view()
相当于numpy中resize()的功能,但是用法可能不太一样。我的理解是:把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。比如说是不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样的。比如,a=torch.Tensor([[[1,2,3],[4,5,6]]])b=torch.Tenso
2020-07-10 12:23:11
4453
转载 [pytorch函数] .expand() .gt() .t()
1 .expand()1.返回tensor的一个新视图,单个维度扩大为更大的尺寸。tensor也可以扩大为更高维,新增加的维度将附在前面。 扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride设为0,一维将会扩展位更高维。任何一个一维的在不分配新内存情况下可扩展为任意的数值。 x = torch.Tensor([[1], [2], [3]]) print "x.size():",x.size() y=x.expand( 3,4 )
2020-07-10 12:21:10
264
转载 BERT模型的使用
BERT模型的使用BERT 的具体介绍,我就略过了,一是网上可以找到很多资料,二是我也只是刚使用了下 BERT,很多细节还不清楚,就不乱说话误导人了。老实说,最开始查资料,找相关工程时,看的头大,不知从何入手。现在总结下我认为的上手BERT的合适流程。了解 BERT 的本质。简单说,BERT 提供了更好的词向量表示,是一个加强版的 Word2Vec,我们只需要在自己的数据集上针对特定任务再进行 fine-tuning 就可以取得不错的效果。至于BERT是如何训练的,以及内部各个参数的含义,我认为可以之
2020-07-08 12:13:24
2846
1
转载 深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析
在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。往往会发现很多问题,比如,GPU内存占用率低,显卡利用率低,CPU百分比低等等。接下来仔细分析这些问题和处理办法。**GPU内存占用率问题这往往是由于模型的大小以及batch size的大小,来影响这个指标。当你发下你的GPU占用率很小的时候,比如40%,70%
2020-06-02 14:28:41
6119
1
转载 [PyTorch] rnn,lstm,gru中输入输出维度
本文中的RNN泛指LSTM,GRU等等CNN中和RNN中batchSize的默认位置是不同的。**CNN中**:batchsize的位置是position 0.**RNN中**:batchsize的位置是position 1.在RNN中输入数据格式:对于最简单的RNN,我们可以使用两种方式来调用,torch.nn.RNNCell(),它只接受序列中的单步输入,必须显式的传入隐藏状态。t...
2020-04-13 20:58:43
993
转载 【pytorch】关于Embedding和GRU的使用详解
1. Embedding的使用pytorch中实现了Embedding,下面是关于Embedding的使用。torch.nn包下的Embedding,作为训练的一层,随模型训练得到适合的词向量。建立词向量层embed = torch.nn.Embedding(n_vocabulary,embedding_size)找到对应的词向量放进网络:词向量的输入应该是什么样子实际上,上面通过随...
2020-04-12 22:17:03
2110
转载 Pytorch nn.Embedding用法(包括加载预训练模型,加载Word2vec,加载glove)
**pytorch nn.Embedding**class torch.nn.Embedding(num_embeddings,embedding_dim,padding_idx=None,max_norm=None,norm_type=2,scale_grad_by_freq=False,sparse=False)num_embeddings (int) - 嵌入字典的大小embe...
2020-04-12 17:48:57
2921
1
转载 pytorch中gather函数的理解
函数torch.gather(input, dim, index, out=None) → Tensor沿给定轴 dim ,将输入索引张量 index 指定位置的值进行聚合.对一个 3 维张量,输出可以定义为:out[i][j][k] = input[index[i][j][k]][j][k] # if dim == 0out[i][j][k] = input[i][index[i][j...
2020-04-08 12:21:27
269
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人