1、pytorch的参数容器是一个class ‘collections.OrderedDict’
2、
expand
expand是指在维度为1的维上进行数据复制
image_data_ = image_data.expand(1,16,-1,-1) #image_data is [1,1,64,64],image_data_ is [1,16,64,64]
3、
repeat
x = torch.ones(2,3,4)
x.repeat(4,5,3).shape #8,15,12
4、
import tensorflow as tf
def get_local_maxima(in_tensor):
max_pooled_in_tensor = tf.nn.pool(in_tensor, window_shape=(3, 3), pooling_type='MAX', padding='SAME')
maxima = tf.where(tf.equal(in_tensor, max_pooled_in_tensor), in_tensor, tf.zeros_like(in_tensor))
return maxima
5、
tf.nn.pool
这里写链接内容
6、
torch.index_select(input, dim, index, out=None)
该函数用来在输入的第dim维上选取index对应的元素
7、
torch.masked_select(input, mask, out=None)
选择出mask对应的那些位置的元素,组成一维向量返回
8、pytorch named_modules() & modules()
Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself. (返回一个迭代器会输出网络里面所有的子模块的名字和这个模块自身)
注意上面的例子,输出的时候不仅仅会把sequential的总体输出来,还会输出sequential里面的每一个子模块。重复的模块就输出一个。
同样的一个例子是,对于
对于nn.sequential用named_modules()来进行打印输出的是总的模块和每一个子模块。
对于普通的函数modules()来讲的话,他只适用于用来打印
modules 和 named_modules返回来的稍微有一点不同,对于modules来讲返回来的时候如果想打印成
的形式的话必须写成
for name, m in enumerate(self.deconv_layers.modules()):
或者
for m in self.deconv_layers.modules():
但对于named_modules()来讲,不用加enumerate即可
for name, m in self.deconv_layers.named_modules():
9、
如果strict=True的话,表示加载的模型和要被初始化的模型必须在参数上一模一样才能被初始化,而strict=False的话,则只需要部分参数和要被初始化的模型是一致的。
10、model.state_dict() && model.module.state_dict()
如果没有使用torch.nn.DataParallel(model).cuda()的话,使用model.state_dict()即可,这个时候是没有module模块的,但是如果使用torch.nn.DataParallel(model).cuda()的话,那么model.state_dict()就会保留module这一个属性,如下图所示
如果使用model.module.state_dict(),就会起到module这一个属性
11、
torch.zeros 和torch.zeros_like只是用法上面的区别,在实际的效果上没有什么太大的区别
12、
volatile关键字的使用
在0.4以前对变量用volatile的话可以用在推理的时候节省显存的使用,
但是在0.4之后这一关键字已经失效,只能使用with torch.no_grad()