[储备池计算MATLAB] 手写数字识别(MNIST)

[储备池计算MATLAB] 手写数字识别(MNIST)

💼作者简介:985研究生一枚(非中介,非中介,非中介!!!),使用MATLAB、Python编程,热爱编程与科研,代码获取、论文复现及科研仿真合作可私信(这段是复制的,中介勿扰)

📝微信公众号:暂无(还没开: )

简介

针对文章Reservoir computing using dynamic memristors for temporal information processing的手写数字识别部分进行复现

Du C, Cai F, Zidan M A, et al. Reservoir computing using dynamic memristors for temporal information processing[J]. Nature communications, 2017, 8(1): 2204.

在这里插入图片描述
该文章17年发表在nature communication为硬件储备池计算较早期的文章,适合练手
在这里插入图片描述

仿真流程

  1. 建立忆阻器响应模型

  2. 将训练集按照论文处理方式输入忆阻器,得到忆阻器的响应

  3. 建立单层网络,对训练集忆阻器的响应进行训练

  4. 将验证集按相同方式输入忆阻器,得到忆阻器响应

  5. 使用训练好的单层网络对验证集忆阻器响应进行推理,得到验证集的准确率

响应模型

参考论文补充材料:

在这里插入图片描述

可以得到忆阻器对脉冲的响应模型

单层网络的部分不再赘述(可参考【吴恩达机器学习 - 3】利用fmincg函数与正则化实现多元分类问题及神经网络初体验(课后练习第三题ex3)-CSDN博客),可以参考吴恩达的机器学习教程,使用fmincg函数对单层网络进行优化

部分代码展示

%载入数据集
load('test_readout_current_500Hz.mat');
load('train_readout_current_500Hz.mat');
load('test_readout_current_20Hz.mat');
load('train_readout_current_20Hz.mat');
load('test_readout_current.mat');
load('train_current.mat');
train_labels1 = readMNISTLabels('train-labels-idx1-ubyte');%标签0~9;60000个标签,大小为60000*1
test_labels1 = readMNISTLabels('t10k-labels-idx1-ubyte'); %10000个标签,大小为10000*1
%

%单张图像转化为行向量
train_data_x = ones(60000,28*4*3);
for i = 1:60000
    tmp1 = train_readout_current_500Hz(:,:,i);
    tmp2 = train_readout_current(:,:,i);
    tmp3 = train_readout_current_20Hz(:,:,i);
    tmp1 = reshape(tmp1,[1,112]);
    tmp2 = reshape(tmp2,[1,112]);
    tmp3 = reshape(tmp3,[1,112]);
    train_data_x(i,:) = [tmp1,tmp2,tmp3];
end
train_lable_y = train_labels1(1:60000)';

%对特征进行标准化 一个忆阻器的readout_current作为一个特征
mu = mean(train_data_x);
sigma = std(train_data_x);
train_data_x = (train_data_x-mu)./sigma;

上述为数据集载入及预处理部分,详细代码及注释可私信获取

仿真结果

在这里插入图片描述

最后的准确率为91.58,和论文结果一致

【笔者过于懒,这里就没展示混淆矩阵…】

表格中其他的Rates,指的是输入图片忆阻器的形式和频率不同,但处理流程一直,更改的仅是步骤2与步骤4

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值