工作小结四

目录

  • 1. 关于VSCode一直出现“Extension loading。。。”
  • 2. TypeError: module.__init__() takes at most 2 arguments (3 given)
  • 3. ValueError: some of the strides of a given numpy array are negative. This is currently not supported, but will be added in future releases.
  • 4. pytorch读取修改预训练模型
  • 5. pytorch设置不同层的学习率

1. 关于VSCode一直出现“Extension loading。。。”

问题描述:

最近使用VSCode调试python的时候,突然python无法加载

解决方案:

直接方法:直接关闭所有extension,然后重启VScode,再打开extension中的python模块即可

间接方案:依次关闭每个extension,看看对python的影响

2. TypeError: module.__init__() takes at most 2 arguments (3 given)

from torch.utils import data
class DCatDataSet(data.Dataset):#注意这里不是data.dataset

3. ValueError: some of the strides of a given numpy array are negative. This is currently not supported, but will be added in future releases.

image = cv2.imread(os.path.join(self.img_path,self.img_list[index]))[:,:,::-1]
image =  torch.from_numpy(image)
#修改为
image = cv2.imread(os.path.join(self.img_path,self.img_list[index]))[:,:,::-1].copy()
image =  torch.from_numpy(image)

4. pytorch读取修改预训练模型

  • 直接覆盖或添加层

假设有下面的模型

import torch.nn as nn
class Test(nn.Module):
    def __init__(self):
        super(Test,self).__init__()
        self.conv_1 = nn.Linear(10, 20, 5),
        self.Relu_1 = nn.Relu()
        self.Conv_2 = nn.Conv2d(20, 64, 5),
        self.Relu_2 = nn.ReLU()
   #其他函数略去

直接覆盖:

test = Test()
test.conv_1 = nn.Linear(20,20,5)

添加层:

test = Test()
test.conv_1 = nn.Squential(
    nn.Relu(test.Conv_2)
    nn.Conv2D(64,64,3)
) 

直接修改层的weight或bias

test.con_1.weight.detach=.....#test.con_1.weight是一个Tensor,具体操作看个人了
test.con_1.bias.detach=.....#
#--------也可以下面这样操作
for name,i in test.named_parameters():
    if "weight" in name:
        i.data[0,0,0]=1#按需操作
  • 任意方式修改网络
#自己定义任意网络
class AlexNet(nn.Module):
    '''
    code from torchvision/models/alexnet.py
    结构参考 <https://arxiv.org/abs/1404.5997>
    '''
    def __init__(self, num_classes=2):
        super(AlexNet, self).__init__()

        self.model_name = 'alexnet'

        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), 256 * 6 * 6)
        x = self.classifier(x)
        return x
#读取任意一个pytorch模型(前提是你初始化的卷积一样就行,网络和名字不相同都无所谓)
pretrain_model = torchvision.models.densenet121(pretrained=True)
#开始赋值
test = AlexNet()
state_dict_my = test.state_dict()
for key,module in list(state_dict_my.items()):
    prrint(key)#可以修改权重的名字
state_dict_py = pretrain_model.state_dict()
for key,module in list(state_dict_py.items()):
    prrint(key)
#根据自己的需要修改网络参数
state_dict_my[list(state_dict_my.keys())[0]] = state_dict_py[list(state_dict_py.keys())[0]]
  • 注意事项

nn.Sequential 定义的层,暂时不知道怎么修改里面的名字数据,单独修改可以,但是同时修改暂时不会

尽量采用第二种方式去修改和定义网络,第一种局限性太小,也没必要去整修改Sequential,就算可以修改,实用性也很小

5. pytorch设置不同层的学习率

  • 相同学习率
#不需要更新的直接设置梯度为False
for name,module in test.named_parameters():
    if "weight" in name:#这里自己设置
        module.requres_grad = False
#----------或者下面这样----------这个方法没测试过
pretrained_state_dict = pretrained_state_model.state_dict()
pretrained_param_names = list(pretrained_state_dict.keys())
for i, param in enumerate(param_names[:-4]):  # excluding conv6 and conv7 parameters
    state_dict[param].requres_grad = False
  • 不同学习率
#这里通过绝对地址进行操作
#当然可以通过keys进行操作
#state_dict_my = list(net.state_dict().keys())
#
#
conv5_params = list(map(id, net.conv5.parameters()))
conv4_params = list(map(id, net.conv4.parameters()))
base_params = filter(lambda p: id(p) not in conv5_params + conv4_params,
                     net.parameters())
params = [{'params': base_params},
          {'params': net.conv5.parameters(), 'lr': lr * 100},
          {'params': net.conv4.parameters(), 'lr': lr * 100}]
optimizer = torch.optim.SGD(params, lr=lr, momentum=0.9)

原文地址:https://www.cnblogs.com/wjy-lulu/p/12078280.html

时间: 2024-10-06 03:50:51

工作小结四的相关文章

工作小结(四)

码流对比工具的开发与维护 1.增加H265模块: 利用任务二和任务三的成果直接完成. 遇到的问题:之前写的demo都是一个算法一个算法的测试,所以write.handle这些操作都直接整合在一起.而码流对比工具就是几种算法的对比,所以看起来同样的处理方法它是合理的,因为是同时处理.强行整合在一起就要把不同的地方设置成参数,这样反而导致参数太多也不好处理. 2.解决fffile采集MP4格式的bug(因为bug性质,暂停处理)以及后续的开发和维护.

团队工作第四次推进之——软件设计规格说明书

完成了系统的需求分析,接下来,要结合UML技术对我们的项目进行总体设计和详细设计工作. 详情请参考我们的软件设计规格说明书. 地址:<软件设计规格说明书> 团队工作第四次推进之--软件设计规格说明书 原文地址:https://www.cnblogs.com/joyce4/p/9097335.html

第二阶段团队冲刺个人工作总结四

项目个人工作总结: 今天是我们团队项目第二次冲刺的第四天 ,个人总结如下: 昨天:昨天我们小组把侧滑菜单做好了中间出了点小bug,现在界面已经可以跳转 今天:昨天完成的页面没有具体内容,今天我把3个界面的框架确定好了,并且完成了框架的内容设计 遇到的困难:框架很难确定,模块太多按钮的添加出现了问题

八年工作小结,以及读书笔记的序

再过10天就工作八年了,时间匆匆而过,这八年做了什么,学会了什么,有必要做一个简单的小结. 工作的前两年用asp和asp.net做企业网站,严格来说这活上学的时候就开始干了.工作加上私单做了得有几百个吧,没什么技术含量,如果说学会了什么,那就是做了几套CMS系统,以便更快的做网站,再就是做了一个购物网站,熟悉了电子商务网站的基本流程. 第三年到了一个做民间借贷的公司,在这个公司的主要工作是开发了一个民间借贷的门户网站.现在看来这个网站做的很粗糙,也就是恰好能跑起来而已.通过这个项目学会了三层架构

汇报工作的四个层级

在不汇报是职场发展的绊脚石中,提到过汇报的重要意义和不汇报的心理因素,实际上汇报只需要掌握一些技巧和方法,就很容易取得理想的结果.当然,不同情况下汇报的目的和方式是有差异的,具体可以根据PDCA循环的四个阶段进行: 计划 计划是工作开展的第一步,任何工作在进行前,都需要有一个明确的计划.很多时候我们不会对计划进行汇报,是因为我们对当前的工作没有计划,这是很可怕的状态,因为不进行计划,事情在最开始就没有处于可控的状态. 比如领导安排了一个工作,行动派会马上开始执行,这会导致可能造成老工作的延期,但

给自己工作第四年做个总结

 工作将要满四年,在编码上的提升已经有限,很多情况下都是在做重复性工作,在业务上也只是增加对领域的熟悉性,出现了发展瓶颈. 2015财年对我来说是工作的第五年,也应该是出现飞跃的一年,在上一年中,有机会参与了项目管理,现场问题支撑,大数据HBASE/HADOOP的开发部署,当然也做了很多编码工作,总得来说还是有进步的. 在项目管理方面: 此一次吃螃蟹,首先要感谢领导的信任能够给我这次机会,项目不大,属于集成两个产品版本的工作,主要是将产品1的后台替换产品2的后台,其中涉及到了HBASE/HADO

构建之法小结四

本周阅读了构建之法的第四章,本章讲了两人合作的前提是代码要规范 (包括代码风格规范及代码设计规范)及代码复审,然后才能结对开发. 以前,写代码时,很多时候是上手就写,一个大括号包含所有内容,虽 然大一时学过函数.类等知识,但写代码时并不使用这些知识. 很显然这样,不利于别人及自己后续阅读代码,因为代码最终是要给人看 的,要想一个团队合作开发,必须有一些大家一致遵守的规则,这样团队 才能良好的进行工作. 在以后的编程实践中,我会注意按照本章的代码规范来编写程序,多加练 习.

[工作笔记之二] 测试工作小结

最近几周跟了两个项目,确切说是一个项目和一个任务. 一.接口测试 任务内容是关于接口的,这次对接口测试有了一个新的认识,顺便感慨一下以前的自己太蠢了.以前测接口,研发都会告诉我怎么测,看到什么样的返回值就就算测完了,所以以前测接口都很快.前段时间整理文档,发现有个老大的测试用例里有关于接口测试的,看进去才知道我测接口测得是多么粗糙啊. 总结一下接口测试: 1. 接口测试也是要写测试用例的. 2. 测试用例中要明确接口地址.各参数类型及意义.返回值的类型.返回值中各字段的含义. 3. 接口中每个参

工作小结(By魔芋)

今天是2016年2月24日星期三,天气还不错,阳光普照. 我是魔芋,写个工作总结,记录一下. 开发重点有数据展示. 涉及到的技术有: SVG地图绘制(通过经纬度,生成SVG地图,绑定点击事件,跳转到相应的省市地图) 以下截图为山东的SVG地图:(网上只找到全国的省级的SVG图.所以相应的市级的只能靠自己了.) echart 饼状图,柱状图,折线图等多种方式来显示数据结果. ajax.后端使用的java.需要定时从后台数据库获取数据. 订单处理. 使用表格类插件.dataTable表格.datep