任务要求:
自定义一个层主要是定义该层的实现函数,只需要重载Function的forward和backward函数即可,如下:
import torch
from torch.autograd import Function
from torch.autograd import Variable
定义二值化函数
class BinarizedF(Function):
def forward(self, input):
self.save_for_backward(input)
在将自定义的网络权重加载到网络中时,报错:
AttributeError: ‘dict’ object has no attribute ‘seek’. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.
我们一步一步分析。
模型网络权重保存额代码是:torch.sa
第一步、导入需要的包
import os
import scipy.io as sio
import numpy as np
import torch
import torch.nn as nn
import torch.backends.cudnn as cudnn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, u
我们知道CNN这类人工神经网络都基于BP算法进行优化,因此需要误差关于权重是连续可导的,这是可以运用BP算法的前提条件;也有一些网络不满足这个条件。
1.可导
对于可连续求导的神经网络构建时采用nn.Module类即可,此时仅仅需要改写__init__和forward方法,torch会自动求导,如下面的例子:
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
1、Tensor
与tensorflow相同,在pytorch框架中,同样使用张量(tensor)来传输数据。我们可以对tensor的维度进行自定义,如果图像转化为tensor,那么一般来说我们需要将图像先转类型为numpy(此时数据维度为N x H x W X C,即数量x高x宽x通道数),然后再使用toTensor()将数据维度转变为N x C x H x W,因为在训练中,需要将通道数提到前面。同时,需要特别注意的是,在训练网络中,图像转为tensor后的数据类型一般会是float或是ui