该代码中编写了许多初始化权重的信息,其他的代码都没有加载过初始化参数的信息吗?

一些方法

string.punctuation

import string
string.punctuation      #所有的标点字符
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

torch.nn.Parameter()

w = nn.Parameter(torch.ones(*param[:4]))

在刷官方Tutorial的时候发现了一个用法self.v = torch.nn.Parameter(torch.FloatTensor(hidden_size)),看了官方教程里面的解释也是云里雾里,于是在栈溢网看到了一篇解释,并做了几个实验才算完全理解了这个函数。首先可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可以训练的类型parameter并将这个parameter绑定到这个module里面(net.parameter()中就有这个绑定的parameter,所以在参数优化的时候可以进行优化的),所以经过类型转换这个self.v变成了模型的一部分,成为了模型中根据训练可以改动的参数了。使用这个函数的目的也是想让某些变量在学习的过程中不断的修改其值以达到最优化。

torch.nn.init.kaiming_normal_

#根据tensor的维度初始化参数
import torch
import torch.nn as nnw = torch.empty(2, 3)# torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')
# tensor([[ 0.2530, -0.4382,  1.5995],
#         [ 0.0544,  1.6392, -2.0752]])

nn.ParameterList()

和上面的nn.ParameterList()配合使用
首先声明一个ParameterList()

vars=nn.ParameterList()
w=nn.Parameter(torch.ones(*param[:4]))
vars.append(w)

再输出ParameterList()就可以看到变化了

torch.ones(*size)

param[:4] [32, 3, 3, 3]
w = nn.Parameter(torch.ones(*param[:4]))

torch.nn.init.kaiming_normal_(w)

argparser.parse_args()

csv.reader()

返回一个reader对象,利用该对象遍历csv文件中的行。

        with open(self.root) as csvfile:csvreader = csv.reader(csvfile, delimiter=',')next(csvreader, None)  # skip (filename, label)for i, row in enumerate(csvreader):

np.random.choice()

#numpy.random.choice(a, size=None, replace=True, p=None)
#从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组
#replace:True表示可以取相同数字,False表示不可以取相同数字
#数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。

 selected_cls = np.random.choice(self.cls_num, self.n_way, False) #随机不重复地取数数据,在cls_num中随机不重复地取n_way个数。

random.sample方法

 selected_text = random.sample(self.dictLabels[str(cls)], self.k_spt + self.k_qry)
#第一个参数是数据,第二个参数是数据的个数

tensorboard X进行可视化

参考文档:https://www.jianshu.com/p/46eb3004beca

torchvision.utils.make_grid

torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)
参数列表如上,参考博客如下:
https://blog.csdn.net/a362682954/article/details/81196840

做的是将若干图像拼接成一幅图像,padding表示图片之间的间隔,padding默认值为2.可以设置为其他值。
参考:https://blog.csdn.net/u012343179/article/details/83007296

plt.ion()

参考资料:https://blog.csdn.net/zbrwhut/article/details/80625702

Variable

https://www.jianshu.com/p/46a04f1f6085

tensor是Pytorch中的完美组件,但是构建神经网络还远远不够,我们需要能够构建计算图的tensor,这就是Variable。在torch中的Variable就是一个存放会变化的值的地理位置,里面的值会不断变化,就像一个装鸡蛋的篮子,鸡蛋数会不断发生变化,里面的鸡蛋就是torch的Tensor了(torch是用tensor计算的,tensor里面的参数都是variable的形式)。Variable是对tensor的封装,操作和tensor是一样的,但是每个Variable都有三个属性,Variable中的tensor本身.data,对应tensor的梯度.grad以及这个Variable是通过说明方式得到的.grad_fn。如果用Variable进行计算,那返回的也是一个同类型的Variable

调用类的时候的一些情况

def __init__中的参数是必须在调用该类的时候就需要传入的
而def forward()中的参数是需要在调用类的对象时候需要传入

 maml=Meta(vocab_size,embedding_dim,n_filters,output_dim,dropout,pad_idx)accs = maml(x_spt, y_spt, x_qry, y_qry)
而Meta类的定义如下class Meta(nn.Module):"""Meta Learner"""def __init__(self, args,vocab_size, embedding_dim, n_filters,filter_sizes, output_dim, dropout, pad_idx,static):def forward(self, x_spt, y_spt, x_qry, y_qry):
如:
#调入类的实例(声明类)
maml = Meta(args,vocab_size=len(vocab),filter_sizes=[3,4,5],embedding_dim=100,n_filters=100,output_dim=1,dropout=0.5,pad_idx=0).to(device)
#调用类的对象(使用类)
accs = maml(x_spt, y_spt, x_qry, y_qry)

使用dataset类的时候

一个错误
在没有看到bert的博客前是想用word2vec来做预训练的模型,出的一个问题是直接用torch.tensor().long()直接去转换我们的英文字符,但是需要注意的是,我们需要先构建一个字典,将我们的数据在预处理的过程中,要将数据转换成对应的词典的索引。这样再继续构成tensor才可以,否则我们无法对其进行使用。这也就是为什么我们需要先构建词典,之后再使用预训练模型bert或者word2vec。通过这个我们也就知道了对文本的基本处理流程(1.导入数据 2.对数据进行处理(分词,除去停用词,和一些无用的标点符号。) 3.构建词典 4.dataloader 5.下游任务)他的__getitem__(self,index)方法只要data和label一一对应,也就是大小尺寸一样就可以,不用注意index指的是什么,即使data的维度很复杂,我们也只需用data[index],label[index]即可。

    def __getitem__(self, index):support_x = self.support_x_batch[index]support_y = self.support_y_batch[index]qry_x = self.qry_x_batch[index]qry_y = self.qry_y_batch[index]return support_x, qry_x, support_y, qry_y

需要修改的地方

  1. miniimagenet_train文件中的config文件,定义了网络层的前向传播的执行过程。根据我们的需求来进行定义,最重要的是尺寸问题
  2. learner.py基本不用修改可以使用我们自己定义的
  3. 修改x_spt, y_spt, x_qry, y_qry的构成。主要是对Minilmageenet.py文件的一个更改,更改了文件的预处理过程,重新编写了create_batch函数。
  4. 因为图片是每张图片存一个位置所以用的是索引来引用图片,但是文本的话我们直接索引即可。因为只有两类所以,我们可以在直接在文件进行分类即可。而且对于最后一步的将图片转为向量,这一步完全可以放到learner的网络结构第一层来进行处理。主要的工作就是,将数据分成sup_x,sup_y,qur_x,que_y这四个。其中的np.random.choice很重要。

预处理

  1. 读取数据并分词,将每一条评论构成一个txt文件。

因为源程序中的是每个图片是一个单独的文件,那么我们也将每条评论构成一条单独的文件。对每个文件进行预处理,分词,去除停用词,构建词典。

#在当前py文件的目录下按csv文件中的数据按'\n'分成一个一个txt文件
import retext = open(r'F:\研一\NLP\数据集\IMDB Dataset.csv',"r", encoding='UTF-8').read()    #打开本体TXT文件text = str(text)
print(text)b=re.split('\n',text)
print(b)
n=0
for i in b:n+=1with open('%s.txt'%n,'w', encoding='UTF-8') as f:f.write(i)

2.读取某文件夹下面的所有文件名,并将其保存到Excel中。
3.可以见其他几篇博客,文本数据预处理(自己定义),文本预处理(torchtext),读取文件以及一些处理方法。

在本代码中学到的东西

如何对自己的语料库划分成support,query,改写dataset类
用自己的语料库使用Word2Vec
统计词频,构建词典
对数据进行一些简单的预处理

MAML-CNN代码笔记相关推荐

  1. tensorflow笔记:多层CNN代码分析

    tensorflow笔记系列:  (一) tensorflow笔记:流程,概念和简单代码注释  (二) tensorflow笔记:多层CNN代码分析  (三) tensorflow笔记:多层LSTM代 ...

  2. CSDN技术主题月----“深度学习”代码笔记专栏

    from: CSDN技术主题月----"深度学习"代码笔记专栏 2016-09-13 nigelyq 技术专题 Hi,各位用户 CSDN技术主题月代码笔记专栏会每月在CODE博客为 ...

  3. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  4. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  5. Pytorch训练Bilinear CNN模型笔记

    Pytorch训练Bilinear CNN模型笔记 注:一个项目需要用到机器学习,而本人又是一个python小白,根据老师的推荐,然后在网上查找了一些资料,终于实现了目的. 参考文献: Caltech ...

  6. 看完师兄的代码笔记,我失眠了

    祝大家中秋节快乐! 最近很多公司的秋季招聘都已经启动了. 想必大家(尤其是经历过求职面试的)都知道,数据结构和算法在求职笔试/面试中的重要性. 纵观如今的互联网公司面试,清一色地都在重点考查这块,不开 ...

  7. LSTM TF核心实现代码笔记

    LSTM TF核心实现代码笔记 1. LSTM TF里的核心代码实现 2. 代码详细讲解 1. LSTM TF里的核心代码实现 LSTM网络的核心实现是在这个包里tensorflow/python.k ...

  8. 2018年最新Spring Boot视频教程附代码笔记资料(50G)

    1. Spring Boot  项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot  项目实 ...

  9. Python Text Processing with NLTK 2.0 Cookbook代码笔记

    如下是<Python Text Processing with NLTK 2.0 Cookbook>一书部分章节的代码笔记. Tokenizing text into sentences ...

  10. Transformer课程 第8课NER案例代码笔记-IOB标记

    Transformer课程 第8课NER案例代码笔记-IOB标记 NER Tags and IOB Format 训练集和测试集都是包含餐厅相关文本(主要是评论和查询)的单个文件,其中每个单词都有一个 ...

最新文章

  1. LENOVO 充到60%就会停止充电
  2. MySql 扩展存储引擎
  3. Exchange 邮件投递被拒的问题分析
  4. Linux起不来,如何修复
  5. App Store新规即将到来 你准备好了吗?
  6. MyBatis3_[tp_41-42-43]-_动态sql_trim_自定义字符串截取_choose分支选择_update的set与if-trim 结合的动态更新...
  7. 视觉SLAM十四讲学习笔记——ch10 后端2
  8. lg5.6不用计算机怎么算,lg换算(lg如何计算)
  9. 委托代理问题------The principal-agent problem
  10. 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。
  11. Prometheus监控kubernetes
  12. Lifeline功能介绍03——课堂信息的查询
  13. 使用两个无线路由器实现桥接中继
  14. 用程序编写计算公式的高次方程数字计算机
  15. Python 读书笔记(1)
  16. 自然语言处理自学笔记-02 Word2vec——基于神经网络学习单词表示
  17. 深度清洁,戴森Cyclone V10无绳吸尘器的高端新味道
  18. python环境-基于go-cqhttp-简易qq聊天机器人
  19. 【人脸识别】千变万化的人脸识别 REID损失函数总结
  20. PHP手机商城毕业设计源码191803

热门文章

  1. 【最新版win10 adb环境变量配置】
  2. 【rmzt:魔兽冰封王座主题】
  3. 找不到该项目(无法删除文件)
  4. css多行文字居中对齐
  5. distpicker联动失效问题
  6. 15分钟学会使用Git和远程代码库
  7. krohne流量计接线图_电磁流量计接线方式
  8. Nginx配置静态资源服务器
  9. 关于电的计算机公式,电量计算公式_有关各类电量的计算公式
  10. cad卸载_老师傅爱不释手的6款CAD插件,款款优秀,用了就再也不舍得卸载