【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

目录
相关文章
|
机器学习/深度学习
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
1196 0
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
|
3月前
|
机器学习/深度学习 Shell 计算机视觉
一文搞懂 卷积神经网络 卷积算子应用举例 池化 激活函数
这篇文章通过案例详细解释了卷积神经网络中的卷积算子应用、池化操作和激活函数,包括如何使用卷积算子进行边缘检测和图像模糊,以及ReLU激活函数如何解决梯度消失问题。
|
4月前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv10改进 -卷积Conv】 AKConv(可改变核卷积):任意数量的参数和任意采样形状的即插即用的卷积
AKConv是一种可改变核卷积,旨在解决传统卷积的局限,包括固定大小的卷积窗口和卷积核尺寸。AKConv提供灵活的卷积核参数和采样形状,适应不同尺度特征。其创新点包括:1)支持任意大小和形状的卷积核;2)使用新算法确定初始采样位置;3)应用动态偏移调整采样位置;4)优化模型参数和计算效率。AKConv已应用于YOLOv8,提高网络性能。相关代码可在<https://github.com/CV-ZhangXin/AKConv>找到。
|
数据采集 机器学习/深度学习 PyTorch
Pytorch学习笔记(5):torch.nn---网络层介绍(卷积层、池化层、线性层、激活函数层)
Pytorch学习笔记(5):torch.nn---网络层介绍(卷积层、池化层、线性层、激活函数层)
788 0
Pytorch学习笔记(5):torch.nn---网络层介绍(卷积层、池化层、线性层、激活函数层)
|
11月前
权重向量介绍
权重向量介绍
176 0
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch: 池化-线性-激活函数层
PyTorch: 池化-线性-激活函数层
180 0
|
机器学习/深度学习
最大值池化与均值池化比较分析
最大值池化与均值池化比较分析
131 0
手推公式之“层归一化”梯度
手推公式之“层归一化”梯度
154 0
|
机器学习/深度学习 自然语言处理 算法
为什么卷积神经网络不是全连接,卷积,池化,激活,损失函数
为什么卷积神经网络不是全连接,卷积,池化,激活,损失函数
184 0
为什么卷积神经网络不是全连接,卷积,池化,激活,损失函数
|
机器学习/深度学习
三、隐藏层中的神经元数量
在隐藏层中使用太少的神经元将导致欠拟合(underfitting) 。相反,使用过多的神经元同样会导致一些问题。首先,隐藏层中的神经元过多可能会导致过拟合(overfitting) 。当神经网络具有过多的节点(过多的信息处理能力)时,训练集中包含的有限信息量不足以训练隐藏层中的所有神经元,因此就会导致过拟合。即使训练数据包含的信息量足够,隐藏层中过多的神经元会增加训练时间,从而难以达到预期的效果。
769 0
三、隐藏层中的神经元数量