当前位置: 首页 > news >正文

【day 52】神经网络调参指南

@浙大疏锦行

import torch import torch.nn as nn # 定义简单的线性模型(无隐藏层) # 输入2个纬度的数据,得到1个纬度的输出 class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() # 线性层:2个输入特征,1个输出特征 self.linear = nn.Linear(2, 1) def forward(self, x): # 前向传播:y = w1*x1 + w2*x2 + b return self.linear(x) # 创建模型实例 model = SimpleNet() # 查看模型参数 print("模型参数:") for name, param in model.named_parameters(): print(f"{name}: {param.data}")
import torch import torch.nn as nn import matplotlib.pyplot as plt import numpy as np # 设置设备 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 定义极简CNN模型(仅1个卷积层+1个全连接层) class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 卷积层:输入3通道,输出16通道,卷积核3x3 self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1) # 池化层:2x2窗口,尺寸减半 self.pool = nn.MaxPool2d(kernel_size=2) # 全连接层:展平后连接到10个输出(对应10个类别) # 输入尺寸:16通道 × 16x16特征图 = 16×16×16=4096 self.fc = nn.Linear(16 * 16 * 16, 10) def forward(self, x): # 卷积+池化 x = self.pool(self.conv1(x)) # 输出尺寸: [batch, 16, 16, 16] # 展平 x = x.view(-1, 16 * 16 * 16) # 展平为: [batch, 4096] # 全连接 x = self.fc(x) # 输出尺寸: [batch, 10] return x # 初始化模型 model = SimpleCNN() model = model.to(device) # 查看模型结构 print(model) # 查看初始权重统计信息 def print_weight_stats(model): # 卷积层 conv_weights = model.conv1.weight.data print("\n卷积层 权重统计:") print(f" 均值: {conv_weights.mean().item():.6f}") print(f" 标准差: {conv_weights.std().item():.6f}") print(f" 理论标准差 (Kaiming): {np.sqrt(2/3):.6f}") # 输入通道数为3 # 全连接层 fc_weights = model.fc.weight.data print("\n全连接层 权重统计:") print(f" 均值: {fc_weights.mean().item():.6f}") print(f" 标准差: {fc_weights.std().item():.6f}") print(f" 理论标准差 (Kaiming): {np.sqrt(2/(16*16*16)):.6f}") # 改进的可视化权重分布函数 def visualize_weights(model, layer_name, weights, save_path=None): plt.figure(figsize=(12, 5)) # 权重直方图 plt.subplot(1, 2, 1) plt.hist(weights.cpu().numpy().flatten(), bins=50) plt.title(f'{layer_name} 权重分布') plt.xlabel('权重值') plt.ylabel('频次') # 权重热图 plt.subplot(1, 2, 2) if len(weights.shape) == 4: # 卷积层权重 [out_channels, in_channels, kernel_size, kernel_size] # 只显示第一个输入通道的前10个滤波器 w = weights[:10, 0].cpu().numpy() plt.imshow(w.reshape(-1, weights.shape[2]), cmap='viridis') else: # 全连接层权重 [out_features, in_features] # 只显示前10个神经元的权重,重塑为更合理的矩形 w = weights[:10].cpu().numpy() # 计算更合理的二维形状(尝试接近正方形) n_features = w.shape[1] side_length = int(np.sqrt(n_features)) # 如果不能完美整除,添加零填充使能重塑 if n_features % side_length != 0: new_size = (side_length + 1) * side_length w_padded = np.zeros((w.shape[0], new_size)) w_padded[:, :n_features] = w w = w_padded # 重塑并显示 plt.imshow(w.reshape(w.shape[0] * side_length, -1), cmap='viridis') plt.colorbar() plt.title(f'{layer_name} 权重热图') plt.tight_layout() if save_path: plt.savefig(f'{save_path}_{layer_name}.png') plt.show() # 打印权重统计 print_weight_stats(model) # 可视化各层权重 visualize_weights(model, "Conv1", model.conv1.weight.data, "initial_weights") visualize_weights(model, "FC", model.fc.weight.data, "initial_weights") # 可视化偏置 plt.figure(figsize=(12, 5)) # 卷积层偏置 conv_bias = model.conv1.bias.data plt.subplot(1, 2, 1) plt.bar(range(len(conv_bias)), conv_bias.cpu().numpy()) plt.title('卷积层 偏置') # 全连接层偏置 fc_bias = model.fc.bias.data plt.subplot(1, 2, 2) plt.bar(range(len(fc_bias)), fc_bias.cpu().numpy()) plt.title('全连接层 偏置') plt.tight_layout() plt.savefig('biases_initial.png') plt.show() print("\n偏置统计:") print(f"卷积层偏置 均值: {conv_bias.mean().item():.6f}") print(f"卷积层偏置 标准差: {conv_bias.std().item():.6f}") print(f"全连接层偏置 均值: {fc_bias.mean().item():.6f}") print(f"全连接层偏置 标准差: {fc_bias.std().item():.6f}")

http://www.jsqmd.com/news/253816/

相关文章:

  • 收藏级!大模型核心架构与底层原理全解析,小白程序员入门必看
  • 定时任务简单源码思路手撕实现
  • Java swing mysql实现的酒店管理系统_javswing酒店管理系统mysql,零基础入门到精通,收藏这篇就够了
  • Commons-io工具包与Hutool工具包
  • MySQL性能优化:从底层原理到实战落地的全维度方案
  • 【课程设计/毕业设计】基于SpringBoot保护濒危野生动物公益救助交流平台基于SpringBoot濒危物种公益救助交流平台【附源码、数据库、万字文档】
  • JVM 里的逻辑漏洞,居然让你的哈希表慢了 20%!
  • 构建智能Agent的三大支柱:上下文工程、会话管理与记忆系统
  • 收藏备用!AI+多领域变革全解析:大模型如何重塑产业生态
  • 收藏备用|RAG技术架构三阶段演进全解析(从入门到进阶,小白也能懂)
  • 毕业论文通关秘籍:宏智树 AI 教你避开 80% 写作坑
  • AI 写论文哪个软件最好?实测封神!宏智树 AI 堪称毕业论文通关外挂
  • 写论文软件哪个好?实测宏智树 AI:毕业论文的全流程效率神器
  • 吐血推荐9个一键生成论文工具,本科生毕业论文轻松搞定!
  • 西门子SMART触摸屏与两台变频器的Modbus RTU通讯实战
  • 春节年货节营销冲刺!AI工具助力快速生成品牌VI全套设计
  • 低成本拿捏高级感|国潮礼盒 AI 渲染工具,年货节设计神器
  • Cesium中的CZML
  • Langchain如何和业务项目集成:LangChain 入门 (二)
  • COMSOL氩气等离子体显示板模型(PDP)探索
  • 潜航者指南:深入探索PyTorch核心API的七大维度
  • 收藏必备!LLM与LMM大模型全解析:从零到精通的学习指南
  • Cesium中的 Entity、Terrain、DataSource开发场景示例
  • MindSpore开发之路:MindSpore Lite实战:在端侧部署AI应用
  • 灵敏度随电池电量下降就会变得不灵敏, 有的时候电机或舵机不工作
  • Chroma向量数据库:超越`client = chromadb.Client()`的深度探索与生产实践
  • Cyber Triage 3.16 发布 - 通过 Cyber Triage Enterprise 更快开展调查
  • 导师严选2026 TOP8 AI论文写作软件:本科生毕业论文全攻略
  • Vue3 + Element Plus 表格复选框踩坑记录
  • 【收藏级干货】RAG技术深度解析:让大语言模型告别“闭卷考试“