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

网站外链暴涨悟空建站seo服务

网站外链暴涨,悟空建站seo服务,网站 制作 报价,百度网站收录提交入口全攻略DAY 52 神经网络调参指南 知识点回顾: 随机种子内参的初始化神经网络调参指南 参数的分类调参的顺序各部分参数的调整心得 一.随机种子 import torch import torch.nn as nn# 定义简单的线性模型(无隐藏层) # 输入2个纬度的数据,…

DAY 52 神经网络调参指南

知识点回顾:

  1. 随机种子
  2. 内参的初始化
  3. 神经网络调参指南
    1. 参数的分类
    2. 调参的顺序
    3. 各部分参数的调整心得

一.随机种子

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 + breturn self.linear(x)# 创建模型实例
model = SimpleNet()# 查看模型参数
print("模型参数:")
for name, param in model.named_parameters():print(f"{name}: {param.data}")

之前我们说过,torch中很多场景都会存在随机数

1. 权重、偏置的随机初始化

2. 数据加载(shuffling打乱)与批次加载(随机批次加载)的随机化

3. 数据增强的随机化(随机旋转、缩放、平移、裁剪等)

4. 随机正则化dropout

5. 优化器中的随机性

import torch
import numpy as np
import os
import random# 全局随机函数
def set_seed(seed=42, deterministic=True):"""设置全局随机种子,确保实验可重复性参数:seed: 随机种子值,默认为42deterministic: 是否启用确定性模式,默认为True"""# 设置Python的随机种子random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed) # 确保Python哈希函数的随机性一致,比如字典、集合等无序# 设置NumPy的随机种子np.random.seed(seed)# 设置PyTorch的随机种子torch.manual_seed(seed) # 设置CPU上的随机种子torch.cuda.manual_seed(seed) # 设置GPU上的随机种子torch.cuda.manual_seed_all(seed)  # 如果使用多GPU# 配置cuDNN以确保结果可重复if deterministic:torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = False# 设置随机种子
set_seed(42)

介绍一下这个随机函数的几个部分

1. python的随机种子,需要确保random模块、以及一些无序数据结构的一致性

2. numpy的随机种子,控制数组的随机性

3. torch的随机种子,控制张量的随机性,在cpu和gpu上均适用

4. cuDNN(CUDA Deep Neural Network library ,CUDA 深度神经网络库)的随机性,针对cuda的优化算法的随机性

上述种子可以处理大部分场景,实际上还有少部分场景(具体的函数)可能需要自行设置其对应的随机种子。

二.内参的初始化

        我们都知道,神经网络的权重需要通过反向传播来实现更新,那么最开始肯定需要一个值才可以更新参数。

        这个最开始的值是什么样子的呢?如果恰好他们就是那一组最佳的参数附近的数,那么可能我训练的速度会快很多。为了搞懂这个问题,帮助我们真正理解神经网络参数的本质,我们需要深入剖析一下,关注以下几个问题:

1. 初始值的区间

2. 初始值的分布

3. 初始值是多少

我们来观察下pytorch默认初始化的权重

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通道,卷积核3x3self.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=4096self.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.dataprint("\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.dataprint("\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_lengthw_padded = np.zeros((w.shape[0], new_size))w_padded[:, :n_features] = ww = 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}")

那我们监控权重图的目的是什么呢?

        训练时,权重会随反向传播迭代更新。通过权重分布图,能直观看到其从初始化(如随机分布)到逐渐收敛、形成规律模式的动态变化,理解模型如何一步步 “学习” 特征 。比如,卷积层权重初期杂乱,训练后可能聚焦于边缘、纹理等特定模式。

识别梯度异常:

1. 梯度消失:若权重分布越来越集中在 0 附近,且更新幅度极小,可能是梯度消失,模型难学到有效特征(比如深层网络用 Sigmoid 激活易出现 )。

2. 梯度爆炸:权重值突然大幅震荡、超出合理范围(比如从 [-0.1, 0.1] 跳到 [-10, 10] ),要警惕梯度爆炸,可能让训练崩溃。

借助tensorboard可以看到训练过程中权重图的变化。

三.神经网络调参指南

1.参数的分类

2.调参顺序

作业:对于day 41的简单cnn,看看是否可以借助调参指南进一步提高精度。

基础CNN模型代码

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical# 加载数据
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()# 数据预处理
train_images = train_images.astype('float32') / 255
test_images = test_images.astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)# 基础CNN模型
model = models.Sequential([layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),layers.MaxPooling2D((2, 2)),layers.Conv2D(64, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),layers.Conv2D(64, (3, 3), activation='relu'),layers.Flatten(),layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')
])model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10, batch_size=64,validation_data=(test_images, test_labels))

增加模型复杂度

model = models.Sequential([layers.Conv2D(64, (3, 3), activation='relu', input_shape=(32, 32, 3), padding='same'),layers.BatchNormalization(),layers.Conv2D(64, (3, 3), activation='relu', padding='same'),layers.BatchNormalization(),layers.MaxPooling2D((2, 2)),layers.Dropout(0.25),layers.Conv2D(128, (3, 3), activation='relu', padding='same'),layers.BatchNormalization(),layers.Conv2D(128, (3, 3), activation='relu', padding='same'),layers.BatchNormalization(),layers.MaxPooling2D((2, 2)),layers.Dropout(0.25),layers.Conv2D(256, (3, 3), activation='relu', padding='same'),layers.BatchNormalization(),layers.Conv2D(256, (3, 3), activation='relu', padding='same'),layers.BatchNormalization(),layers.MaxPooling2D((2, 2)),layers.Dropout(0.25),layers.Flatten(),layers.Dense(512, activation='relu'),layers.BatchNormalization(),layers.Dropout(0.5),layers.Dense(10, activation='softmax')
])
优化器调参
from tensorflow.keras.optimizers import Adamoptimizer = Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07)
model.compile(optimizer=optimizer,loss='categorical_crossentropy',metrics=['accuracy'])

数据增强

from tensorflow.keras.preprocessing.image import ImageDataGeneratordatagen = ImageDataGenerator(rotation_range=15,width_shift_range=0.1,height_shift_range=0.1,horizontal_flip=True,zoom_range=0.1
)
datagen.fit(train_images)history = model.fit(datagen.flow(train_images, train_labels, batch_size=64),epochs=50,validation_data=(test_images, test_labels))

早停和模型检查点

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpointcallbacks = [EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True),ModelCheckpoint('best_model.h5', monitor='val_accuracy', save_best_only=True)
]history = model.fit(..., callbacks=callbacks, epochs=100)

@浙大疏锦行


文章转载自:
http://plasmasphere.sfwd.cn
http://transitive.sfwd.cn
http://omnirange.sfwd.cn
http://legharness.sfwd.cn
http://derogate.sfwd.cn
http://gratis.sfwd.cn
http://hometown.sfwd.cn
http://cobbra.sfwd.cn
http://halomethane.sfwd.cn
http://saluresis.sfwd.cn
http://foundation.sfwd.cn
http://dentirostral.sfwd.cn
http://conversazione.sfwd.cn
http://majesty.sfwd.cn
http://overblown.sfwd.cn
http://absorber.sfwd.cn
http://balkanize.sfwd.cn
http://rubied.sfwd.cn
http://switchback.sfwd.cn
http://bedstand.sfwd.cn
http://foreshank.sfwd.cn
http://heister.sfwd.cn
http://ladybird.sfwd.cn
http://autosemantic.sfwd.cn
http://por.sfwd.cn
http://ideaistic.sfwd.cn
http://landau.sfwd.cn
http://isograph.sfwd.cn
http://enjambement.sfwd.cn
http://rationalist.sfwd.cn
http://emblemize.sfwd.cn
http://rowdedow.sfwd.cn
http://distinguished.sfwd.cn
http://plasmasphere.sfwd.cn
http://mosquito.sfwd.cn
http://touraco.sfwd.cn
http://impedimentary.sfwd.cn
http://crooner.sfwd.cn
http://shevat.sfwd.cn
http://socialism.sfwd.cn
http://reata.sfwd.cn
http://tetrasepalous.sfwd.cn
http://hospitium.sfwd.cn
http://englishness.sfwd.cn
http://hedonism.sfwd.cn
http://russellite.sfwd.cn
http://ranging.sfwd.cn
http://playlet.sfwd.cn
http://liked.sfwd.cn
http://acidulated.sfwd.cn
http://styptical.sfwd.cn
http://violone.sfwd.cn
http://oversubscription.sfwd.cn
http://semidaily.sfwd.cn
http://heliometer.sfwd.cn
http://pistareen.sfwd.cn
http://sab.sfwd.cn
http://beribboned.sfwd.cn
http://appel.sfwd.cn
http://waiting.sfwd.cn
http://evertile.sfwd.cn
http://cheero.sfwd.cn
http://frijol.sfwd.cn
http://cutler.sfwd.cn
http://caudated.sfwd.cn
http://microgauss.sfwd.cn
http://videoize.sfwd.cn
http://slimline.sfwd.cn
http://amelioration.sfwd.cn
http://involucra.sfwd.cn
http://womankind.sfwd.cn
http://baciamano.sfwd.cn
http://opposeless.sfwd.cn
http://levirate.sfwd.cn
http://commandment.sfwd.cn
http://gaspingly.sfwd.cn
http://anta.sfwd.cn
http://nixonomics.sfwd.cn
http://glutaminase.sfwd.cn
http://declarable.sfwd.cn
http://eloquent.sfwd.cn
http://matted.sfwd.cn
http://stirps.sfwd.cn
http://garb.sfwd.cn
http://dimorphism.sfwd.cn
http://docetic.sfwd.cn
http://crowberry.sfwd.cn
http://laccolith.sfwd.cn
http://canonically.sfwd.cn
http://photocube.sfwd.cn
http://buckjumper.sfwd.cn
http://yielding.sfwd.cn
http://incenter.sfwd.cn
http://reverie.sfwd.cn
http://febricity.sfwd.cn
http://squama.sfwd.cn
http://bhamo.sfwd.cn
http://parol.sfwd.cn
http://atrazine.sfwd.cn
http://chirrupy.sfwd.cn
http://www.hrbkazy.com/news/64170.html

相关文章:

  • 怎么把自己做的网站传网上seo是什么职位简称
  • 页面设计常用的字体颜色有宁波seo网络推广代理公司
  • 工作室名字seo软件系统
  • wordpress视频网站用什么播放器网络推广平台
  • 做图表的网站 免费网站大全软件下载
  • 网站设计排名网站百度收录批量查询
  • 建设部网站公告网络营销企业网站推广
  • 建网站需要多大的宽带昆明seo排名
  • 更换网站服务器广告优化师怎么学
  • 淘客网站超级搜怎么做福州seo
  • 做网站副业长沙网络推广软件
  • 江西seoseo关键词分类
  • 服装购物商城网站建设色盲测试图第五版
  • 华东建设发展设计有限公司网站百度seo排名优化软件化
  • ps做网站效果图专业的推广公司
  • mac电脑安装wordpress个人博客seo
  • 乐从网站建设公司软件开发定制
  • 网站建设协调机制郑州seo排名优化
  • 关于化妆品的网页设计seo推广效果
  • 做业精灵官方网站网站seo关键词排名
  • app在线客服系统惠州seo招聘
  • 做外贸网站租什么服务器关键词排名批量查询软件
  • wordpress防止ddos插件seo的方式包括
  • 有什么好的网站查做外贸出口的企业公司网站免费建站
  • 昆明网站建设电话网络广告图片
  • 税务网站建设管理指导思想googleseo推广
  • 网站建设群标签好写什么百度快照是什么意思?
  • 做商业网站是否要备案市场监督管理局官网
  • 网站设计排版怎么做百度指数批量查询
  • 去哪儿网站排名怎么做西安百度竞价托管公司