ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Pytorch框架详解之一

2022-12-27 17:10:34  阅读:88  来源: 互联网

标签:Python php MySQL 数据 系统 连接器 筛选 


Pytorch基础操作

numpy基础操作

  • 定义数组(一维与多维)
  • 寻找最大值
  • 维度上升与维度下降
  • 数组计算
  • 矩阵reshape
  • 矩阵维度转换

代码实现

import numpy as np


a = np.array([1, 2, 3, 4, 5, 6])  # array数组
b = np.array([8, 7, 6, 5, 4, 3])
print(a.shape, b.shape)  # shape为数组的格式

aa = np.reshape(a, (2, 3))  # reshape为格式转换,格式转换为2行3列的二维数组
print(aa, aa.shape)

bb = np.reshape(b, (1, 1, 1, 6))  # 转换为 1*1*1*6 格式的数组
print(bb, bb.shape)

a1 = np.squeeze(aa)  # squeeze方法会将只有 1 的维度去掉,只保留大于 1 的维度
b1 = np.squeeze(bb)
print(a1, a1.shape)
print(b1, b1.shape)

a2 = np.transpose(aa, (1, 0))  # transpose数组转置,原行列式形式为(0,1),后面的参数(1,0)表示将行列交换位置变为(1,0)格式
print(a2, a2.shape)

b_index = np.argmax(b)  # argmax函数表示获取该数组中的最大值索引
bb_index = np.argmax(bb)
aa_index = np.argmax(aa[0])  # argmax函数可以获取多维数组中任意维度中最大值的索引,没有输入维度时会将多维数组转换为一维获取索引
print(b_index, b[b_index])
print(bb_index, bb[0][0][0][bb_index])
print(aa_index)

a3 = np.reshape(aa, -1)  # 参数-1表示恢复成一维数组
print(a3, a3.shape)

# zeros函数以0填充生成指定行列大小的数组,数组数值类型默认为float64,可手动设置int8,uint8(无符号二进制整型),float16,float32,float64等
m1 = np.zeros((6, 6), dtype=np.uint8)
m2 = np.linspace(6, 10, 100)  # linspace函数,以均匀步长生成数字序列,linspace(start,end,nums)
print(m1)
print(m2)

OpenCV-Python基础操作

  • 读写图像与灰度转换
  • 读取视频与显示
  • 归一化与显示
  • 创建空白图像
  • 提取ROI与分离、合并通道

代码实现

import cv2 as cv
import numpy as np


src = cv.imread("D:/images/lena.jpg")
h, w, c = src.shape  # 获取到图像的类型为HWC
print(h, w, c)

src1 = np.transpose(src, (2, 0, 1))  # 将输入图像的通道类型进行转置
print(src1.shape)

float_src = np.float32(src) / 255.0  # 将图像变成0-1的浮点数类型

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
rgb = cv.cvtColor(src, cv.COLOR_BGR2RGB)  # opencv读取的图像默认为BGR三通道,转换为RGB三通道图像

dst = cv.resize(src, (224, 224))

cv.imshow("input", src)
cv.imshow("float_src", float_src)
cv.imshow("GRAY", gray)
cv.imshow("GRAY_0", src[:, :, 0])  # 进入图像第一个通道,前面两个:表示尺寸512
# cv.imshow("GRAY_1", src[:, :, 1])  # 进入图像第一个通道
# cv.imshow("GRAY_2", src[:, :, 2])  # 进入图像第一个通道
# cv.imshow("GRAY_3", src[:, :, :])  # 获取图像三个通道
cv.imshow("zoom out", dst)  # zoom in放大,zoom out缩小

box = [50, 50, 100, 100]  # x, y, w, h
roi = src[200:400, 200:400, :]  # 截取目标区域 src[y1:y2, x1:x2, :] 灰度图则不需要最后的通道数:
cv.imshow("roi", roi)

m1 = np.zeros((512, 512), dtype=np.uint8)  # 创建空白单通道灰度图像
m2 = np.zeros((512, 512, 3), dtype=np.uint8)  # 创建空白三通道彩色图像
m2[:, :, :] = (127, 0, 0)  # 对图像的三通道进行赋值
cv.imshow("m1", m1)
cv.imshow("m2", m2)

cv.rectangle(src, (200, 200), (400, 400), (0, 255, 0), 2, 8)  # 对选定的左上角坐标与右下角坐标之间绘制矩形
cv.imshow("rect_src", src)

cap = cv.VideoCapture("D:/images/video/face_detect.mp4")
while True:
    ret, frame = cap.read()
    if ret is not True:  # ret为布尔类型,表示是否获取到下一帧图像
        break
    cv.imshow("video", frame)
    c = cv.waitKey(50)  # waitKey方法是等待一定的时间获取键盘输入,参数为等待的毫秒数,默认可设为1
    # c = cv.waitKey(1)
    if c == 27:  # 如果按下ESC则退出循环
        break

cv.waitKey(0)
cv.destroyWindow()

效果:

Pytorch基础操作

  • 定义常量与变量
  • Tensor与numpy转换
  • 数据reshape与最大值索引
  • 随机数据生成
  • 基本算术操作
  • 基本卷积操作
  • GPU检测与支持
  • 网格化与cat

代码实现

import torch
import numpy


x = torch.empty(2, 2)
x1 = torch.zeros(2, 2)
x2 = torch.randn(2, 2)  # 随机生成指定大小的tensor
print(x)
print(x1)
print(x2)

y = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
z = torch.tensor([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
print(y)
print(z)
res01 = torch.add(y, z)
res02 = y.add(z)
print(res01)
print(res02)

# x = x.view(-1, 4)  # -1为自动补充,4表示转置为4列的tensor,最终转置成1行4列的tensor
x = torch.view_copy(x, (4, -1))  # 将x转置为4行1列
print(x)
print(x.size())  # 获取x的维度信息

nx = x.numpy()  # tensor转换为numpy数组
print(nx)

tensor_x = torch.from_numpy(nx.reshape((2, 2)))  # numpy数组转换为tensor
print(tensor_x)

if torch.cuda.is_available():  # 使用GPU对tensor进行运算
    print("GPU Detected")
    result = x.cuda() + y.cuda()
    print(result)
else:
    print("GPU is not available")

训练过程中关于LOSS的一些说明

  1. train loss 不断下降,test loss 不断下降,说明网络正在学习
  2. train loss 不断下降,test loss 趋于不变,说明网络过拟合
  3. train loss 趋于不变,test loss 趋于不变,说明学习遇到瓶颈,需要减小学习率或者批处理大小
  4. train loss 趋于不变,test loss 不断下降,说明数据集100%有问题
  5. train loss 不断上升,test loss 不断上升(最终变为NaN),可能是网络结构设计不当,训练超参数设置不当,程序bug等某个问题引起

自动梯度与回归

自动梯度

函数式的编程方式

  • 所见即所得,定义类、方法、函数、参数
  • 先检查语法错误
  • 再编译与链接
  • 生成可执行文件
  • 支持各种参数输入与输出,界面的交互操作

标签:Python,php,MySQL,数据,系统,连接器,筛选,
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有