您的位置:首页 > 健康 > 养生 > 建站极速通_企业关键词推广_优书网_一个产品的市场营销策划方案

建站极速通_企业关键词推广_优书网_一个产品的市场营销策划方案

2025/5/19 11:35:17 来源:https://blog.csdn.net/CSBLOG/article/details/142918845  浏览:    关键词:建站极速通_企业关键词推广_优书网_一个产品的市场营销策划方案
建站极速通_企业关键词推广_优书网_一个产品的市场营销策划方案

 deep learning

layer

1. 线性层:linear layer / fully connected layer / dense layer
  • 核心操作:内积计算 inner product / dot product 相乘再相加
  • edge weight
  • output node / bias
  • 本质:线性层,不断叠加
2. 激活层:activation layer / nonlinearity
  • 引入非线性因素,提高模型的表达能力
  • ReLU: Rectified Linear Unit
3. model
  • 由layer堆叠构成
  • 继承 nn.Module 模块
  • class 自定义一个类
    • __init__
      • 接受和处理超参数
      • 实例化后续需要使用的层
    • forward
      • 接受一个批量的特征
      • 根据算法逻辑,调用不同的层来处理数据
4. 训练 train
  • 做必要的准备,实例化必要的类:
    • model
    • optimizer
    • loss_fn
    • data_loader
  • 流程:
    • 遍历数据集加载器,取出一批数据
    • 把特征X导入模型,做正向传播,得到预测结果y_pred
    • 通过损失函数,计算预测结果和真实结果的误差 loss
    • 根据loss做反向传播,计算每个参数的偏导数
    • 利用优化器让每个参数减去偏导数,执行梯度下降的过程,优化一步
    • 利用优化器清空每个参数的偏导数,为下次优化做准备
    • 重复上面的过程,直到退出即可
5. 过程监控:
  • 回归问题:
    • get_loss
  • 分类问题:
    • get_acc
    • get_recall
    • get_precision
    • get_f1_score
6. 保存模型
  • 分离式保存
    • 保存定义模型的类
    • 保存模型训练完之后的权重
7. 数据的批量化打包
  • 目的:数据量比较大,不可能一次性加载到内存中。所以需要分批次加载数据。
  • 使用:
    • Step1 : 训练开始,需要一批数据。
    • Step2 : 到硬盘中读取原始数据
    • Step3 : 做必要的预处理和数据增强
    • Step4 : 交给模型训练
    • Step5 : 训练完成后丢掉
    • Step6 : 从感应片读取第二批数据
    • Step7 : 依次循环……
  • 本质:生成器 generator
  • PyTorch的策略:
    • Step1:自定义Dateset,继承torch.utils.data.Dataset
      • __init__ 初始化工作,数据的地址
      • __len__ 实现查询数据集中的样本个数
      • __getitem__ 实现按索引读取样本
    • Step2:实例化DataLoader

表格类数据

  • 机器学习
  • 全连接网络
  • 数据格式:[ batch_size, num_features ]

图像 / 视频类数据

图像:
  • 宽度 W :width
  • 高度 H :height
  • 通道 C :channel
格式:
  • [ batch_size, channel, height, width ]
  • [ N, C, H, W]
视频:
  • 拆解为图像
  • [ batch_size, channel, height, width, time_step ]

图像的读取

  • matplotlib
    • 数据科学三剑客
    • 数据可视化
    • 高仿版Matlab
    • from matplotlib import pyplot as plt
      import numpy as np# 1. 读取数据
      img = plt.imread(fname="girl.jpg")# [H, W, C] RGB
      img.shape# 2. 图像展示
      plt.imshow(X=img)
      # 图像处理1:读取 R层
      img_r = img[:, :, 0]
      plt.imshow(X=img_r, cmap="gray")# 处理2:截取图像上半部分
      H, W, C = img.shape
      plt.imshow(X=img[:H//2, :, :])# 处理3:右侧半张图像
      plt.imshow(X=img[: , W//2:, :])# 左下角图像的1/4
      plt.imshow(X=img[H//2:,:W//2,:])# 亚采样:类似于马赛克效果
      plt.imshow(X=img[::30, ::30, :])# 保存
      plt.imsave(fname="girl_new.jpg", arr=img[::30, ::30, :])
    • 没有内置图像处理的功能

    • 需要手动去操控Numpy数组

  • OpenCV
    • 平面图像处理金标准
    • C++
    • 使用Python调用
    • pip install opencv-python
    • import cv2# 读取图像
      img = cv2.imread("girl.jpg")# 显示图像
      cv2.imshow(winname="girl",mat=img)# 按键等待
      cv2.waitKey(delay=3000)# 释放资源
      cv2.destroyWindow()
      
      # 引入OpenCV
      import cv2# 1. 建立连接
      cap = cv2.VideoCapture(0)# 2. 增删改查
      while True:# 读取一帧status, frame = cap.read()# 读取失败if not status:print('error')break# 读取成功cv2.imshow(winname="demo", mat=frame)# 暂留一帧(按ESC键退出)if cv2.waitKey(delay=1000 // 24) == 27:break# 3. 释放资源
      cap.release()
      cv2.destroyWindow()print(cap.isOpened())
      
      import cv2
      from matplotlib import pyplot as plt
      import numpy as npimg = plt.imread(fname="girl.jpg")img_r = img[:,:,0]plt.imshow(X=img_r,cmap="gray")"""
      平均滤波,卷积操作创建一个NxN的矩阵,矩阵的每个元素都除以N的平方
      """
      N = 32
      kernel = np.ones(shape=(N,N)) / N**2
      img1 = cv2.filter2D(src=img_r, ddepth=-1, kernel=kernel)
      plt.imshow(X=img1, cmap="gray")"""
      上下相减
      """
      kernel = np.array([[1,1,1],[0,0,0],[-1,-1,-1]])
      img1 = cv2.filter2D(src=img_r, ddepth=-1, kernel=kernel)
      plt.imshow(X=img1, cmap="gray")"""
      左右相减
      """
      kernel = np.array([[1,1,1],[0,0,0],[-1,-1,-1]]).T
      img1 = cv2.filter2D(src=img_r, ddepth=-1, kernel=kernel)
      plt.imshow(X=img1, cmap="gray")"""
      将矩阵的元素全部改成1,中间的改成-8
      上下左右对角相减,相当于抽取上下左右全部的特征
      """
      kernel = np.array([[1,1,1],[1,-8,1],[1,1,1]]).T
      img1 = cv2.filter2D(src=img_r, ddepth=-1, kernel=kernel)
      plt.imshow(X=img1, cmap="gray")

  • PIL: Python Imaging Library
    • Python 内置库
    • Pytorch 无缝衔接
    • from PIL import Imageimg = Image.open(fp="girl.jpg")type(img)dir(img)# W, H
      img.sizeimg.width# 强行改变图像的size
      img.resize(size=(100, 100))将图像img绕其中心旋转-20度
      img.rotate(angle=-20)# 图像转换为灰度图
      img.convert(mode="L")# 获取图像中(100, 100)位置的像素值
      img.getpixel(xy=(100, 100))# 将图像转换为NumPy数组,并获取其形状 
      np.array(img).shape# 顺时针旋转10度,不调整图像大小(可能会裁剪)
      img1 = img.rotate(angle=10)
      # 显示旋转后的图像  
      img1.show()  # 如果希望完整显示旋转后的图像,不裁剪任何部分  
      # 可以使用expand=True参数,并指定填充颜色(例如白色)  
      img2 = img.rotate(angle=10, expand=True, fillcolor="white")  # 显示完整旋转后的图像  
      img2.show()

错误处理

OMP 错误
  • 详情:OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
  • 原因:系统只允许初始化一次
  • 解决:
# 设置环境变量,解决 OMP 错误
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

卷积操作

  • 原始图像
  • 卷积核
  • 相乘再相加
  • 不同的卷积核,可以得到不同的结果,这就是卷积处理的本质

传统图像处理 VS 人工智能算法

  • 传统图像处理:
    • 卷积核是人来设计的,对人的要求非常高
    • 需要懂信号处理、复杂的数学等
    • 核的设计是重点、难点、内功的体现
    • 难度大,效果差
    • 需要自己考虑如何解决问题,每一步都需要自己去想和做
  • 人工智能算法:
    • 卷积核是参数,是系统优化的目标
    • 让算法自己来定,需要什么特征就通过反向传播算法改卷积核,从而获得相关的特征即可
    • 将最难、最不可控的交给计算机去处理,通过野蛮计算去实现
    • 规则由数据来定,而不是人来定。
    • 结果说法
    • 包工头,自己不管如何实现,只看结果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com