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

day37简单的神经网络@浙大疏锦行

day37简单的神经网络@浙大疏锦行

使用 sklearn 的 load_digits 数据集 (8x8 像素的手写数字) 进行 MLP 训练。

importtorchimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.datasetsimportload_digitsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportMinMaxScalerimportnumpyasnpimportmatplotlib.pyplotasplt# 1. 加载数据digits=load_digits()X=digits.data y=digits.targetprint(f"数据形状:{X.shape}")print(f"标签形状:{y.shape}")# 查看一张图片plt.imshow(digits.images[0],cmap='gray')plt.title(f"Label:{y[0]}")plt.show()

数据形状: (1797, 64) 标签形状: (1797,)

# 2. 数据预处理# 划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)# 归一化scaler=MinMaxScaler()X_train=scaler.fit_transform(X_train)X_test=scaler.transform(X_test)# 转换为 TensorX_train=torch.FloatTensor(X_train)y_train=torch.LongTensor(y_train)X_test=torch.FloatTensor(X_test)y_test=torch.LongTensor(y_test)print("训练集 Tensor 形状:",X_train.shape)print("测试集 Tensor 形状:",X_test.shape)

训练集 Tensor 形状: torch.Size([1437, 64])

测试集 Tensor 形状: torch.Size([360, 64])

# 3. 定义模型classMLP(nn.Module):def__init__(self):super(MLP,self).__init__()# 输入层 64 (8*8像素) -> 隐藏层 32 -> 输出层 10 (0-9数字)self.fc1=nn.Linear(64,32)self.relu=nn.ReLU()self.fc2=nn.Linear(32,10)defforward(self,x):out=self.fc1(x)out=self.relu(out)out=self.fc2(out)returnout model=MLP()print(model)

MLP(

(fc1): Linear(in_features=64, out_features=32, bias=True) (relu): ReLU()

(fc2): Linear(in_features=32, out_features=10, bias=True)

)

# 4. 定义损失函数和优化器criterion=nn.CrossEntropyLoss()optimizer=optim.SGD(model.parameters(),lr=0.1)# 学习率稍微调大一点,或者增加epoch
# 5. 训练模型num_epochs=2000losses=[]forepochinrange(num_epochs):# 前向传播outputs=model(X_train)loss=criterion(outputs,y_train)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()losses.append(loss.item())if(epoch+1)%100==0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss:{loss.item():.4f}')

# 6. 可视化损失plt.plot(range(num_epochs),losses)plt.xlabel('Epoch')plt.ylabel('Loss')plt.title('Training Loss')plt.show()

# 7. 模型评估withtorch.no_grad():# 训练集准确率outputs_train=model(X_train)_,predicted_train=torch.max(outputs_train,1)accuracy_train=(predicted_train==y_train).sum().item()/y_train.size(0)# 测试集准确率outputs_test=model(X_test)_,predicted_test=torch.max(outputs_test,1)accuracy_test=(predicted_test==y_test).sum().item()/y_test.size(0)print(f'训练集准确率:{accuracy_train:.4f}')print(f'测试集准确率:{accuracy_test:.4f}')

@浙大疏锦行

http://www.cnnetsun.cn/news/42650.html

相关文章:

  • 【水果识别】基于机器视觉苹果和香蕉的成熟度和大小检测附Matlab代码
  • JAVA的平凡之路——此峰乃是最高峰JVM-附加小菜-04
  • 【电力系统】电力系统优化与控制热液调度附Matlab代码和报告
  • 基于6种最新算法(小龙虾优化算法COA、MSA、RTH、NOA、BFO、SWO)求解机器人路径规划研究附Matlab代码
  • Golang实战:构建综合多头(逾期+反欺诈)风险查询的高性能客户端
  • 【TSP问题】基于蜣螂算法DBO和改进的蜣螂算法FADBO求解旅行商TSP问题(可根据自己的经纬度设置自己想要到达的地区)附Matlab代码
  • 【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析附Matlab代码
  • 数据结构:二叉排序树,平衡二叉树,红黑树的介绍
  • 软件复用的分类与实现
  • google服务
  • 进程PCB
  • 实战教程:1小时掌握逆向Unity游戏 (共13课时)
  • [从零构建操作系统]08 函数调用时栈的底层行为解析
  • 力扣hot100:搜索插入位置
  • Java冷启动全指南:从原理到实战优化
  • 测试 - 单元测试(JUnit)
  • C++中多态
  • c++经典练习题-多分支
  • qt为什么转向用cmake放弃qmake
  • 云屋音视频 SDK 凭何成为信创技术困局的 “破局者”?
  • 纯电动汽车动力经济性仿真:Cruise与Simulink联合仿真(2015版),包含BMS、再...
  • 【怎么理解maven中的镜像和仓库?】
  • comsol枝晶生长,沉积模型,包括:典型,形状成核,随机成核,均匀沉积,雪花晶形成过程。 适...
  • 终极指南:Qwen3-30B-A3B多GPU分布式推理完整解决方案
  • 腾讯混元语音驱动数字人技术:重塑动态视频生成新范式
  • 【MicroPython编程-ESP32篇】-Web页面显示DHT11传感器数据
  • DCDC电池模型:基于Matlab 2018b及以上的应用
  • Day 38 - Dataset 和 DataLoader
  • [C#][winform]基于yolov11的打架行为检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
  • 2022年TRC SCI1区TOP,基于随机分形搜索算法的多无人机四维航迹优化自适应冲突消解方法,深度解析+性能实测