loc/iloc函数
loc函数:通过行索引“index”中的具体值来取行数据 iloc函数:通过行号来取行数据
import numpy as np
import pandas as pd
#创建一个Dataframe
data = pd.DataFrame(np.arange(16).reshape(4,4), index=list('abcd'), columns=list('ABCD'))
#data是
Out[data]:
A B C D
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
2.利用loc、iloc提取列数据
data.loc[:, ['A']]#取'A'列所有行
data.loc[:,['A','B']]#多取几列
data.iloc[:,[0]]#取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
data.loc[['a','b'],['A','B']] #提取index为'a','b',列名为'A','B'中的数据
data.loc[:,:] #取A,B,C,D列的所有行
data.iloc[:,:] #取第0,1,2,3列的所有行
4.利用loc函数,根据某个数据来提取数据所在的行
data.loc[data['A']==0]#提取data数据(筛选条件:A列中数字为0所在的行数据)
torchvision.transforms数据增强
train_transform = transforms.Compose([
transforms.Resize((224, 224)),
# 1 CenterCrop
# transforms.CenterCrop(512), # 512
# 2 RandomCrop
# transforms.RandomCrop(224, padding=16),
# transforms.RandomCrop(224, padding=(16, 64)),
# transforms.RandomCrop(224, padding=16, fill=(255, 0, 0)),
# transforms.RandomCrop(512, pad_if_needed=True), # pad_if_needed=True
# transforms.RandomCrop(224, padding=64, padding_mode='edge'),
# transforms.RandomCrop(224, padding=64, padding_mode='reflect'),
# transforms.RandomCrop(1024, padding=1024, padding_mode='symmetric'),
# 3 RandomResizedCrop
# transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5)),
# 4 FiveCrop
# transforms.FiveCrop(112),
# transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),
# 5 TenCrop
# transforms.TenCrop(112, vertical_flip=False),
# transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),
# 1 Horizontal Flip
# transforms.RandomHorizontalFlip(p=1),
# 2 Vertical Flip
# transforms.RandomVerticalFlip(p=0.5),
# 3 RandomRotation
# transforms.RandomRotation(90),
# transforms.RandomRotation((90), expand=True),
# transforms.RandomRotation(30, center=(0, 0)),
# transforms.RandomRotation(30, center=(0, 0), expand=True), # expand only for center rotation
transforms.ToTensor(),
transforms.Normalize(norm_mean, norm_std),
])
valid_transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(norm_mean, norm_std)
])
squeeze和unsqueeze
x = torch.randn(3,1,4,1,2) b = torch.squeeze(x, dim=1) # torch自带函数删除第二维度,只能删除所有为1的维度 b = torch.unsqueeze(a, dim=1) #在第2维度添加维度为1的维度
numpy.astype()
import torch
x=torch.Tensor([1,2])
print('x: ',x)
print('type(x): ',type(x))
print('x.dtype: ',x.dtype) # x的具体类型
y=x.int()
print('y: ',y)
print('type(y): ',type(y))
print('y.dtype: ',y.dtype) # y的具体类型
float 单精度浮点数在机内占 4 个字节,用 32 位二进制描述。 double 双精度浮点数在机内占 8 个字节,用 64 位二进制描述。 浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占 1 位二进制,表示数的正负。
指数符占 1 位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx, 但不存开头的 0 和点。
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占 24 位,指数符加指数占 8 位 – float。
数符加尾数占 48 位,指数符加指数占 16 位 – double。
知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。 数的正负。
指数符占 1 位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx, 但不存开头的 0 和点。
指数存指数的有效数字。
指数占多少位,尾数占多少位,由 对编程人员来说,double 和 float 的区别是 double 精度高,有效数字 16 位,float 精度 7 位。但 double 消耗内存是 float 的两倍,double 的运算速度比 float 慢得多, C 语言中数学函数名称 double 和 float 不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。
简单来说,Float 为单精度,内存中占 4 个字节,有效数位是 7 位(因为有正负,所以不是8位),在我的电脑且 VC++6.0 平台中默认显示是6位有效数字;double为 双精度,占 8 个字节,有效数位是 16 位,但在我的电脑且 VC++6.0 平台中默认显示同样是 6 位有效数字
train_.py
import os: #导入API(Application Programming Interface)应用程序编程接口。是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
torch的基本功能
torch:张量的相关运算,eg:创建、索引、切片、连续、转置、加减乘除等 torch.nn:搭建网络层的模块(modules)和一系列的loss函数。eg:全连接、卷积、池化、BN分批处理、dropout、CrossEntropyLoss、MSLoss等 torch.autograd:提供Tensor所有操作的自动求导方法 torch.nn.functional:常用激活函数relu、leaky_relu、sigmod等 torch.optim:各种参数优化方法,例如SGD、AdaGrad、RMSProp、Adam等 torch.nn.init:可以用它更改nn.Module的默认参数初始化方式 torch.utils.data:用于加载数据torchwision的基本功能 torchvision,datasets:常用数据集,MNIST、COCO、CIFAR10等 torchvision.models: 常用模型AlextNet、VGG、ResNet、DenseNet等 torchvision.transforms:图片相关处理。裁剪、尺寸缩放、归一化等。 torchvision.utils:将给定的Tensor保存成image文件
matplotlib.pyplot import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], ‘ro’)
plt.axis([0, 6, 0, 20])
plt.show()
import numpy as np
import matplotlib.pyplot as plt
# 0到5之间每隔0.2取一个数
t = np.arange(0., 5., 0.2)
# 红色的破折号,蓝色的方块,绿色的三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()
sklearn评价分类结果 sklearn.metrics
torch.manual_seed(100)
在神经网络中,参数默认是进行随机初始化的。如果不设置的话每次训练时的初始化都是随机的,导致结果不确定。如果设置初始化,则每次初始化都是固定的。if args.seed is not None: random.seed(args.seed) # torch.manual_seed(args.seed) #为CPU设置种子用于生成随机数,以使得结果是确定的 torch.cuda.manual_seed(args.seed) #为当前GPU设置随机种子; cudnn.deterministic = True#如果使用多个GPU,应该使用torch.cuda.manual_seed_all()为所有的GPU设置种子。
plt.scatter()函数
用于生成一个scatter散点图
print(f"xxx"),print(’’‘i’m it’s’’’)如实打印出内容, print(r’\n’)不转译打印出\n
python的print字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,如果字符串里面没有表达式,那么前面加不加f输出应该都一样.
round(a, 5) # a保留5位小数
Round(数值,保留的小数位数)
f.truncate()
truncate() 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
SummaryWriter
https://pytorch.org/docs/1.7.1/tensorboard.html#torch.utils.tensorboard.writer.SummaryWriter
a = [[] for i in range(7)]
range() 函数可创建一个整数列表,python中用来在for循环中遍历。
np.expand_dims(a, axis=?)
扩展numpy数组a的维度。
import numpy as np
a = np.array([[1, 2], [3, 5]])
x = np.expand_dims(a, axis=2)
y = np.expand_dims(a, axis=1)
z = np.expand_dims(a, axis=0)
print(f'''x.shape:{x.shape}\nx={x}''')
print('y.shape= ', y.shape, '\ny= ', y)
print('z.shape= ', z.shape, '\nz= ', z)
x.shape:(2, 2, 1)
x=[[[1]
[2]]
[[3]
[5]]]
y.shape= (2, 1, 2)
y= [[[1 2]]
[[3 5]]]
z.shape= (1, 2, 2)
z= [[[1 2]
[3 5]]]
cv2.Laplacian(image, cv2.CV_64F, ksize=3)
边缘检测参数 ksize是算子的大小
loss.backward(),scheduler(),optimizer.step()的作用
.csv file
import csv with open("",’’, newline=’’)没有就创建 a,不覆盖,w,覆盖
print()
os.rmdir和shutil.rmtree