【17】查看中间层卷积核的权重及偏置等参数

简介: 【17】查看中间层卷积核的权重及偏置等参数

首先先放代码:


analyze_feature_map.py

import torch
from backbone import MobileNetV3_large
import matplotlib.pyplot as plt
import numpy as np
# create model
model = MobileNetV3_large()
# load model weights
model_weight_path = 'MobileNetV3_Large.mdl'
model.load_state_dict(torch.load(model_weight_path))
# print(model)
# 获取模型的所以状态
modelstate = model.state_dict()
# 获取模型的全部关键字
weights_keys = model.state_dict().keys()
print(weights_keys)
for key in weights_keys:
    # remove num_batches_tracked para(in bn)
    if "num_batches_tracked" in key:
        continue
    # 获取对应字典中的数值参数
    # [kernel_number, kernel_channel, kernel_height, kernel_width]
    weight_t = model.state_dict()[key].numpy()
    # print('weight_t.size', weight_t.size)
    # read a kernel information
    # 根据切片操作还可以对特定的卷积核进行状态查看
    # k = weight_t[0, :, :, :]
    # calculate mean, std, min, max
    weight_mean = weight_t.mean()
    weight_std = weight_t.std(ddof=1)
    weight_min = weight_t.min()
    weight_max = weight_t.max()
    print("mean is {}, std is {}, min is {}, max is {}"
          .format(weight_mean, weight_std, weight_max, weight_min))
    # plot hist image
    plt.close()
    # 将卷积核的权重展开成一个一维的向量
    weight_vec = np.reshape(weight_t, [-1])
    # hist绘制直方图,bins将min-max区间平分成50等份,再统计每一个小份之间的数量
    plt.hist(weight_vec, bins=50)
    plt.title(key)
  # 保存图像的方法
    # plt.savefig('outputs.jpg')
    plt.show()


在调试过程中,可以查看全部的参数的

image.png

具体思路就是通过model.state_dict()来获得整个模型中的全部参数,然后得出的结果是一个字典,然后可以在这个字典中的关键字来获取每一个卷积层的具体的权重参数或者是偏置参数,注意BN层是没有bias参数的,只有weight参数。

image.png

然后得到具体卷积层的参数之后,就可以查看卷积核的数量,通道,长宽等具体参数了,排列顺序为:[kernel_number, kernel_channel, kernel_height, kernel_width]

image.png

得到整层参数之后,可以借助matplotlib来绘制等等

image.png

参考链接:

https://www.bilibili.com/video/BV1z7411f7za

目录
相关文章
|
机器学习/深度学习
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
1174 0
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
|
2月前
|
机器学习/深度学习 Shell 计算机视觉
一文搞懂 卷积神经网络 卷积算子应用举例 池化 激活函数
这篇文章通过案例详细解释了卷积神经网络中的卷积算子应用、池化操作和激活函数,包括如何使用卷积算子进行边缘检测和图像模糊,以及ReLU激活函数如何解决梯度消失问题。
|
2月前
|
机器学习/深度学习 编解码 计算机视觉
CNN 中卷积层和池化层的作用
【8月更文挑战第15天】
55 0
|
3月前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv10改进 -卷积Conv】 AKConv(可改变核卷积):任意数量的参数和任意采样形状的即插即用的卷积
AKConv是一种可改变核卷积,旨在解决传统卷积的局限,包括固定大小的卷积窗口和卷积核尺寸。AKConv提供灵活的卷积核参数和采样形状,适应不同尺度特征。其创新点包括:1)支持任意大小和形状的卷积核;2)使用新算法确定初始采样位置;3)应用动态偏移调整采样位置;4)优化模型参数和计算效率。AKConv已应用于YOLOv8,提高网络性能。相关代码可在<https://github.com/CV-ZhangXin/AKConv>找到。
|
10月前
权重向量介绍
权重向量介绍
160 0
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch: 池化-线性-激活函数层
PyTorch: 池化-线性-激活函数层
174 0
|
机器学习/深度学习
最大值池化与均值池化比较分析
最大值池化与均值池化比较分析
123 0
手推公式之“层归一化”梯度
手推公式之“层归一化”梯度
148 0
|
机器学习/深度学习 自然语言处理 算法
为什么卷积神经网络不是全连接,卷积,池化,激活,损失函数
为什么卷积神经网络不是全连接,卷积,池化,激活,损失函数
172 0
为什么卷积神经网络不是全连接,卷积,池化,激活,损失函数
|
机器学习/深度学习 人工智能 自然语言处理
手写数字识别python代码 卷积层,池化层,正向传播(relu:激活函数)
手写数字识别python代码 卷积层,池化层,正向传播(relu:激活函数)
287 0
手写数字识别python代码 卷积层,池化层,正向传播(relu:激活函数)