张量网络编程学习笔记(3-1):TN_Tutorial神经网络模块化编程:AD_Circuits.FCNN.py - 一个简明完整的 FCNN 示例

文章介绍了基于张量网络的FCNN神经网络实现,包括MNIST手写数字分类任务,模块化编程思想,以及Softmax和交叉熵损失函数在训练过程中的应用。通过调整网络层数观察对性能的影响,并展示了训练和验证的损失与准确率曲线。
摘要由CSDN通过智能技术生成

承接上讲,文件参照TN_Tutorial.AD_Circuits.FCNN.py :张量网络编程学习笔记(3-0):神经网络模块化编程预备知识_Sauvignon.的博客-CSDN博客

* MNIST 手写字分类介绍:

* 建立 class fcnn(nn.Module)实例:

batch_size:分批次学习(1)控制复杂度(2)间接提升泛化能力(3)针对特定样本提取特征     

dim_hidden:超参数,隐藏层的维数 ~   784 x hidden  ~ hidden x 10                                         

def __init__:super(fcnn,self)里面定义一个继承的父类                                                                  

self.layer1,self.layer2等:定义类属性,在同一个class下可以跨函数插入/调用                                 

MNIST数据集:输入规格28 x 28 = 784手写字灰度图,包含784个标量(0-1之间255个float变量)   

x.reshape(x.shape[0],-1) ~ 矩阵化  , 每个样本占一行:

当然,我们可以测试一下:

import torch as tc
from torch import nn

layer = nn.Linear(20,10)

data = tc.randn((2,20),dtype = tc.float32)
out1 = layer(data)
out2 = data.mm(layer.weight.t())+layer.bias

print(layer.weight.shape)
print(layer.bias.shape)

print((out1-out2).norm)

* 建立数据集读取,优化器:

   

* Softmax-交叉熵损失函数:

* it_times循环里分批次训练,测试:

 y : 向前传播的结果样本个数 x 分类数 的 矩阵 = 300 x 10 ; lb(并非独热):300维的向量,

predicted = y.argmax(dim=1)
total += lb.shape[0]
# 逐batch统计分类标签数多少个
num_c += predicted.eq(lb).sum().item()
# 逐batch累计分类标签和预测标签的吻合数目

我们尝试在命令行里直观地打印出来:epoch :20, num_batch[-1]

y.argmax:找到最大元素所在位置,dim = 1对列指标切片返回最大列,最大概率作为分类结果,   最后返回 (分类 )列向量: 样本数 x 1 。 

 

 统计一下正确个数:273/300

 先将test_loss, num_c, total = 0 ,tc.no_grad( ) ~ 模型梯度 置零:测试集并不参与优化。

在最简单的FCNN分类器num_layer=2 看到:loss 和 acc 随epoch训练曲线如图示: 

loss:     acc:    

如果我们再加一层呢?FCNN分类器num_layer=3 看到:loss 和 acc 随epoch训练曲线如图示:

loss:     acc:

:加深!

* 在哪以及如何,需要调用这个模块: 

       * 仅仅作为教学资料展示的完整FCNN,交待了调nn建立class,模块化编程的基本结构。

       * 后文NN_alog.py 的 FC2_classifier,一个打包好的分类器,还有ADQC_classifier 

          这些都会应用在iris数据集。

       * 再QRNN(量子RNN),ADQC,LSTM,LSTM三者对比还会有个LSTM的封装,   

          RNN,LSTM,这些或许还会作为我们的课程的笔记补充吧()

                                                                                               

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值