构建网络遇到的问题-AlexNet

1.对模型进行初始化采用的一般代码

    def _initialize_weights(self):
        for m in self.modules():  # 遍历模型每一层
            if isinstance(m, nn.Conv2d):  # 判定m层是否属于nn.Conv2d类型
                nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                if m.bias is not None:
                    nn.init.constant_(m.bias, 0)
            elif isinstance(m, nn.Linear):  # 判定m层是否属于nn.Linear类型
                nn.init.normal_(m.weight, 0, 0.01)  # normal distribution正态分布
                # nn.init.normal从正态分布中取值将weight填满,mean平均值,std方差
                nn.init.constant_(m.bias, 0)
                # 用val值将m.bias填满

2.os.getcwd() 获取当前的工作目录

若当前文件是train.py位于在D:\projects\AlexNet\train.py

os.getcwd()返回D:\projects\AlexNet

3.assert语句

用一种更方便的方式将debug语句插入到程序中,等价于

if __debug__:
   if not expression:

        raise AssertionError

assert os.path.exists(image_path), "{} path does not exist.".format(image_path)

此句的意思就是如果image_path这条路径不存在则输出不存在

4.torchvision.datasets.ImageFolder()

常设置的两个参数:

root=文件所在位置

transform=数据要进行的操作

该函数要求:

1)每个类别需要单独成立一个文件夹
2)每个类别里面的图片需要按顺序排列(无论使用英语还是数字)

该函数生成对象有三个属性

classes:即目录下文件夹(类别)的个数

classes_to_idx:即目录下文件夹(类别)的对应的id,从0开始

imgs:整个大文件目录下的所有图片及对应类别

例如:

train_dataset = datasets.ImageFolder(root=os.path.join(image_path, "train"),
                                     transform=data_transform["train"])

实质上train_dataset里面的内容是由所有图片进行排列的,每一行都由(img,类别号)组成

输出第一张图片的类别号

注:此次训练Alexnet的训练数据集是没有标签的,但是每个类别的图片位于对应类别的的文件夹下,使用ImageFolder的用处一是将各类别文件夹下的图片汇聚,二是为各图片打上类别标签,还可以利用ImageFolder对象的class_to_idx属性回去类别和其对应编号

5.python与json的转换

(1)将python对象转化为json文件

json_str = json.dumps(cla_dict, indent=4)

写一个json文件

with open('class_indices.json', 'w') as json_file:
    json_file.write(json_str)

(2)读取一个json文件,并将json对象转化为python对象

with open("class_indices.json","r") as f:
    class_id = json.load(f)

6.程序运行进度条

train_bar = tqdm(train_loader, file=sys.stdout)

7.在模型训练完后,用图片去让模型进行分类,要注意模型使用的图片大小,输入的图像一般要是4维的。

8.模型最后输出一般是一个二维数组,(图片个数,类别个数)

在使用torch.softmax时要注意维度,dim=1代表对每行进行softmax

torch.argmax同理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值