num

AttributeError: ‘NoneType’ object has no attribute ‘data’

安稳与你 提交于 2020-02-08 01:47:10
参考资料 issue pytorch: grad is None while training pytorch冻结部分参数训练另一部分 问题描述 将别人模型替换成自己的模型,训练过程中出现错误 param.grad.data.clamp_(-grad_clip, grad_clip) AttributeError: 'NoneType' object has no attribute 'data' 解决方法 上网查询这个问题,大部分回答都是模型中定义的某个层没有参与到前向传播,所以反向传播,计算loss时, grad is None 。主要是要找到未参与计算的层,并注释掉。 这个问题困扰我很久,因为始终觉得没有多余的层。 下面的代码定义一个AttentionResNet模型。后来才发现罪魁祸首是 self.encoder ,这所以前面一直没有注意到它,是因为后面的层的定义用到 self.encoder 中的某个层或某几个层组合。 class AttentionResNet ( nn . Module ) : def __init__ ( self , in_channels = 3 , out_channels = 1 , num_filters = 32 , encoder_depth = 34 , pretrained = True ) : super (

Python实战笔记(三) 多线程

陌路散爱 提交于 2020-02-08 00:06:10
Python 提供 threading 模块用于控制线程,使我们处理多线程更加方便 1、线程模块的常用属性和方法 active_count() :返回当前存活的线程对象的数量 enumerate() :返回当前存活的线程对象的列表 current_thread() :返回当前线程对象 main_thread() :返回主线程对象 get_ident() :返回当前线程的线程标识符 stack_size([size]) :返回创建线程时使用的堆栈大小 TIMEOUT_MAX :指定阻塞函数(如 acquire 、 wait 、 wait_for 等)timeout 参数的最大值 import threading thread_number = threading.active_count() print(thread_number) # 1 curr_thread = threading.main_thread() main_thread = threading.current_thread() print(curr_thread == main_thread) # True 2、创建线程对象 threading.Thread(group, target, name, args, kwargs, *, daemon) group:为拓展 ThreadGroup 而保留,无需设置

Django自定义分页器

纵然是瞬间 提交于 2020-02-07 23:15:00
自定义分页器,用于django在后端查询出来的数据,展示到前端页面,以分页的形式展示出来。 1、将封装好的代码,写入py文件中,例如: mypagination.py # mypagination.py class Pagination(object): def __init__(self, current_page, all_count, per_page_num=10, pager_count=11): """ 封装分页相关数据 :param current_page: 当前页 :param all_count: 数据库中的数据总条数 :param per_page_num: 每页显示的数据条数 :param pager_count: 最多显示的页码个数 """ try: current_page = int(current_page) except Exception as e: current_page = 1 if current_page < 1: current_page = 1 self.current_page = current_page self.all_count = all_count self.per_page_num = per_page_num # 总页码 all_pager, tmp = divmod(all_count, per_page_num

浅谈康托展开和其逆运算

北战南征 提交于 2020-02-07 22:41:42
康托展开,是一种在 \(\mathcal{O}(n^2)\) ( \(n\) 为排列元素个数)时间复杂度求解某一排列在全排列中的次序的算法。 我们以一道例题引入: 排列的序号 题目描述: 给定一个数 \(n\) 和一个 \(n\) 个数的排列 \(a\) ,求 \(a\) 在 \(n\) 的全排列中的序号。 输入描述: 第一行一个整数 \(n\) ,第二行一个排列 \(a\) 。 输出描述: 求 \(a\) 在 \(n\) 的全排列中的序号。 输入输出样例: 输入 3 123 输出 1 数据范围 \(n\le 15\) 根据排列组合、加法原理等等,得出一个式子: \[ans=\sum_{i=1}^n(a_{n+1-i}(n-i)!)\] ( \(a_i\) 表示原数的第 \(i\) 位在当前未出现的元素中是排在第几个) 此为康托展开,代码如下: ull Cantor(int n,int a[15]) //对于n的一个排列a进行康托展开 { ull ans=0; //因答案可能很大所以用ull for (int i=0;i<n;i++) { int x=0; //x代指公式中a[i],节省空间 for(int j=i+1;j<n;j++) //计算公式中a[i] if (a[j]<a[i]) ++x; ans+=x*fact[n-i-1]; } return ans+1; //答案要

棋盘 || 状压DP

纵然是瞬间 提交于 2020-02-07 22:02:24
题意:有一个n*m的棋盘(n,m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻)。求合法的方案总数。 思路:对于每一行,如果把没有棋子的地方记为0,有棋子的地方记为1,那么每一行的状态都可以表示成一个2进制数,进而将其转化成10进制。    那么这个问题的状态转移方程就变成了:    设dp[i][j][k]表示当前到达第i行,一共使用了j个棋子,且当前行的状态在压缩之后的十进制数为k时的状态总数。那么我们也可以类似的写出状态转移方程:    dp[i][i][k]=sum(dp[i-1][j-num(k)][w]) num(k)表示 k状态中棋子的个数,w表示前一行的状态。 最基本的做法是:首先判断k状态是否合法,也就是判断在这一行中是否有2个旗子相邻,然后枚举上一行的状态w,判断w状态是否合法,            然后判断k状态和w状态上下之间是否有相邻的棋子。 下面是其他网上来的代码,三维状压DP https://www.cnblogs.com/a-clown/p/6145462.html #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm>

Python全栈(四)高级编程技巧之10.Python多任务-协程

社会主义新天地 提交于 2020-02-07 22:00:53
文章目录 一、生成器-send方法 1.同步、异步 2.堵塞、非堵塞 3.生成器的send()方法 二、使用yield完成多任务和yield from 1.使用yield完成多任务 2.yield from的使用 三、协程-使用greenlet&gevent完成多任务 1.协程概念 2.使用greenlet完成多任务 3.使用gevent完成多任务 4.gevent简单应用 5.进程、线程和协程对比 一、生成器-send方法 1.同步、异步 同步: 是指代码调用 IO操作 时,必须等待IO操作完成才返回的调用方式。 异步: 是指代码调用 IO操作 时,不必等IO操作完成就返回的调用方式。 同步异步比较如下: 2.堵塞、非堵塞 阻塞: 从调用者的角度出发,如果在调用的时候,被卡住,不能再继续向下运行,需要等待,就说是阻塞。 堵塞的例子有: 多个用户同时操作数据库和锁机制 Socket的 accept() 方法 input() 非阻塞: 从调用者的角度出发,如果在调用的时候,没有被卡住,能够继续向下运行,无需等待,就说是非阻塞。 3.生成器的send()方法 之前讲到生成器: def create_fib ( num ) : a , b = 0 , 1 current_num = 0 while current_num < num : yield a a , b = b , a + b

JS笔记之第二天

安稳与你 提交于 2020-02-07 21:59:01
一元运算符:++ -- 分为前++和后++ and 前--和后-- 如果++在后面,如:num++ +10参与运算,先参与运算,自身再加1 如果++在前面,如:++num+10参与运算,先自身加1,然后再参与运算 如果--在后面,如:num-- +10参与运算,先参与运算,自身再减1 如果--在前面,如:--num+10参与运算,先自身减1,然后再参与运算 例子: 代码是从上到下,一行一行执行的。 ++在后面: var num1=10; var sum1=num1++ +10; //sum1=num1++ +10=10+10=20 //num1++=10+1=11 console.log(sum1);//20 ++在前面 var num2=10; var sum2=++num2+10; //++num2=10+1=11 //sum2=++num2+10=11+10=21 console.log(sum2);//21 - -在后面 var num3=10; var sum3=num3-- +10; //sum3=num3-- +10=10+10=20; //num3--=10-1=9 console.log(sum3);//20 - -在前面 var num4=10; var sum4=--num4+10; //--num4=10-1=9 //sum4=--num4+10=9+10

和给为定数(二分)

江枫思渺然 提交于 2020-02-07 21:58:39
和给为定数 蒜头君给出若干个整数,询问其中是否有一对数的和等于给定的数。 输入格式 共三行: 第一行是整数 n(0 < n \le 100,000)n(0<n≤100,000),表示有 nn 个整数。 第二行是 nn 个整数。整数的范围是在 00 到 2\times 10^82×10 8 之间。 第三行是一个整数 m(0 \le m \le 2^{30})m(0≤m≤2 30 ),表示需要得到的和。 输出格式 若存在和为 mm 的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行"No"。 输出时每行末尾的多余空格,不影响答案正确性 样例输入 4 2 5 1 4 6 样例输出 1 5 思路说明 首先我想用标记数组,这个数存在则f[i]=1;不存在则f[i]=0; 然后从前到后遍历时只需要判断f[m-i]是否等于1即可,等于就输出这两个数,不等则继续遍历。 (单纯脸) 但是!!!我以为数据只有10,000,但是这只是数据的组数,而数据的大小达到惊人的2*10^8,我总不能开那么大的数组吧!!! 所以这个想法被pass掉。 然后又想刚才那个想法有冗余的数据空间,就想用vector试试看,STL中的好东西,经过了一番push_back()和迭代器操作之后发现,时间超限!!! 最后( 正解 )

IO流---统计某路径下代码行数

丶灬走出姿态 提交于 2020-02-07 19:58:44
import java . io . BufferedReader ; import java . io . File ; import java . io . FileReader ; import java . io . IOException ; public class LinesOfCode { public static void main ( String [ ] args ) { showLines ( new File ( "D:\\明治" ) ) ; System . out . println ( "代码总行数为" + num ) ; } /** * 统计Idea中文件夹文件的 代码行数 * @param path Idea项目存放地址 */ private static int num ; //写在外面 便于以下方法递归时 不会重新定义num public static void showLines ( File file ) { //判断是否为 文件 //文件————读 if ( file . isFile ( ) ) { try ( BufferedReader bf = new BufferedReader ( new FileReader ( file ) ) ; ) { while ( bf . readLine ( ) != null ) {

2020牛客寒假算法基础集训营1 J题可以回顾回顾

老子叫甜甜 提交于 2020-02-07 15:01:58
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的。 A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的,所以要注意去除这个重复部分的。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; typedef long long ll; const int mod=1e9+7; int main(){ ll n,m,ans=0; scanf("%lld%lld",&n,&m); ans=2*(m-2)%mod*m%mod*(n-1)%mod; ans+=2*(n-2)%mod*n%mod*(m-1)%mod; ans+=2*(m-1)%mod*(m-2)%mod*(n-2)%mod; ans+=2*(n-1)%mod*(n-2)%mod*(m-2)%mod; ans%=mod; printf("%lld\n",ans); return 0; } A B.kotori和bangdream 这个题目也很简单,因为每一个音符的概率都是确定的。。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; typedef long long