最近在复现AlexNet分类神经网络时,遇到了一些重复出现的问题,特此在这记录一下。
-
1.这一部分主要是针对python的os操作
-
random.seed():使用该函数可以保证随机生成的数据具有可复现性,即
保证随机性具有可复现性,只要seed()里的数字不变,下一次生成的随机数不变
import numpy as np
np.random.seed(0)
num = np.random.randint(1,10,(3,2))
print(num)
-
os.getcwd():返回当前python文件所在的目录
import os
cwd = os.getcwd()
print(cwd)
-
os.path.join():拼接文件目录,可以同时拼接多个目录
root1 = os.path.join(cwd,'dd','bb','kk') print(root1)
-
断言assert:条件为False时执行,条件为True时不执行
x = 4 assert x > 5,"警告!x小于5了"
-
os.path.exists():测试该路径目录或文件是否存在,存在返回True,不存在返回Fals
root = os.path.join(os.getcwd(),'flower_data','flower_photos') print(os.path.exists(root)) assert os.path.exists(root),f"警告,该{root}不存在!"
-
os.listdir():返回该目录下的所有文件夹和文件
root = os.path.join(os.getcwd(),'flower_data','flower_photos') print(os.listdir(root))
-
os.path.isdir():测试该目录是否存在,存在返回Tru,不存在返回False(不能用于测试文件,测试文件不管文件是否存在都会返回False)
root = os.path.join(os.getcwd(),'flower_data','flower_photos','LICENSE.txt') print(os.path.isdir(root))
-
list = [i for in 集合 if i 逻辑条件]:把集合中符合逻辑条件的i添加到list列表中去
list1 = [i for i in range(5,20) if i >= 10] print(list1)
-
os.makedirs():新建目录文件 os.rmdir():删除目录文件
root = os.path.join(os.getcwd(),'flower_data','ctd') os.makedirs(root) os.rmdir(root)
-
2.这一部分是针对神经网络的
-
nn.init.kaiming_normal_():凯明权重初始化方法
from torch import nn list1 = [[0.5513, 0.9908, 0.1751, 0.5281, 0.1055], [0.3166, 0.1625, 0.0898, 0.7519, 0.1822], [0.0461, 0.2430, 0.9435, 0.0249, 0.5389]] tensor1 = torch.Tensor(list1) print(f"初始化前tensor1:{tensor1}") nn.init.kaiming_normal_(tensor1,mode="fan_out",nonlinearity='relu') print(f"初始化后tensor2:{tensor1}") list2 = [[0.5513, 0.9908, 0.1751, 0.5281, 0.1055], [0.3166, 0.1625, 0.0898, 0.7519, 0.1822], [0.0461, 0.2430, 0.9435, 0.0249, 0.5389]] tensor2 = torch.Tensor(list2) print(f"初始化前tensor1:{tensor2}") nn.init.kaiming_normal_(tensor2,mode="fan_in",nonlinearity='relu') print(f"初始化后tensor2:{tensor2}") list3 = [[0.5513, 0.9908, 0.1751, 0.5281, 0.1055], [0.3166, 0.1625, 0.0898, 0.7519, 0.1822], [0.0461, 0.2430, 0.9435, 0.0249, 0.5389]] tensor3 = torch.Tensor(list3) print(f"初始化前tensor1:{tensor3}") nn.init.kaiming_normal_(tensor3,mode="fan_out",nonlinearity='relu') print(f"初始化后tensor2:{tensor3}")
-
nn.init.constant_():偏置初始化
from torch import nn list1 = [[0.5513, 0.9908, 0.1751, 0.5281, 0.1055], [0.3166, 0.1625, 0.0898, 0.7519, 0.1822], [0.0461, 0.2430, 0.9435, 0.0249, 0.5389]] tensor1 = torch.Tensor(list1) print(f"初始化前tensor1:{tensor1}") nn.init.constant_(tensor1,0.2) print(f"初始化后tensor2:{tensor1}")
-
item():用于将张量特定位置的元素转换为python的基本数据类型
tensor = torch.randn(3,2) print(tensor) num = tensor[2,1].item() print(f"num:{num}\nnum的类型:{type(num)}")
-
torch.max()的用法
tensor = torch.Tensor([[7, 3, 9, 1, 4], [9, 3, 2, 9, 5], [5, 5, 4, 5, 3], [5, 4, 2, 8, 8]]) print(tensor) # dim=1按行最大 torch.max()返回两个元素,一个是最大元素,一个是最大元素的位置 tensor = torch.max(tensor,dim=1) print(f"最大元素:{tensor[0]}\n最大元素的位置:{tensor[1]}")