基于神经网络实现手写数字识别(matlab)

2023-11-15

  • 实验目的

matlab平台上,采用神经网络实现手写数字识别。在实验过程中:

1、初步探讨数据集预处理的作用

2、增加对神经网络的理解,探讨隐含层层数,节点数和训练步长对识别成功率的影响,找到较佳的参数。

3、应用交叉验证法评估训练模型的优劣,建立多次实验取均值的严谨思维。

分类器原理阐述

  1、前向传播:

输入样本从输入层传入,经隐层逐层处理后,传到输出层,计算实际输出和期望输出的误差。

  2、误差反向传播:

运用链式法则,采用误差梯度下降法对权值进行修正。

  1. 重复上述过程,直到满足一定条件:
  1. 网络实际输出与期望输出的总误差 < 阈值。
  2. 最近一轮训练中所有权值变化最大值 < 阈值。
  3. 算法达到最大允许的总训练次数

  • 实验方法
  1. 对所给图片进行读取和处理
  1. 修改图片的命名方式,每个数字的不同样本依次命名为:‘1.png’,’2.png’...’55.png’。方便下面数据读取和处理。(这里自己写了一个程序自动修改图片名)
  2. 调用data=imread(picture_name)函数读取每张图片数据。
  3. 将得到的原始数据灰度化,数据类型转化以及二值化。(数据类型转化必不可少,要将uint8类型转化为double型才能保证接下来对数据运算是正确的。一开始没有做这一步使神经网络每次训练出来的输出都是无穷大。)
  4. 找到数字所在区域,去除多余的空白空间。(这一步可以有效提高学习正确率)
  5. 将图片数据由矩阵形式转化为列向量。
  6. 依次读取所有图片,并将图片读取顺序打散,间接实现打散样本。
  7. 将每个数字的样本5等份,每次取不同的一份作为测试集,其余作为训练集。
  1. 生成相应标签矩阵:

      通过重复取单位矩阵不同列巧妙地构造出训练和测试标签。

  1. 使用5倍交叉验证法评估训练模型的优劣:
  1. 取好对应训练集和测试集。
  2. 初始化网络:隐含层层数,节点数,训练步长,训练最大迭代次数,训练精度等等。
  3. 调用net=train(net,train_data,train_label)函数训练神经网络。
  4. 调用test_output=sim(net,test_data)函数对测试集进行测试。
  5. 计算训练正确率。
  6. 以上重复5次。
  7. 以上重复3次。

  • 实验结果

1、初步探讨数据集预处理对实验结果的影响:

(1)处理前和处理后的数字样本图片:

                                                           

                  处理前                                                                        处理后

可以看到,处理后图片去掉了许多不必要的空白部分,增加了有用像素点比例。

  1. 同一网络结构:

(3)处理前后训练正确率比较:

                                         

                       处理后                                           处理前

  由上可知:在网络结构相同的情况下对图片处理前后正确率天差地别,在我看来,这或许是因为这些图像只有两种取值,一个是0,另一个是255。值255对网络中的权值影响比0大许多,如果没有将大量空白区域通过预处理删去,那么有效信息(即0)对网络权值的影响将更少,这会极大的影响网络的训练。

2、探讨隐含层节点数对识别成功率的影响:

隐含层层数

隐含层节点数

训练步长

识别成功率

   1

(20)

  0.1

  0.7455

   1

  (25)

  0.1

  0.8

   1

(30)

  0.1

0.8455

   1

  (35)

  0.1

0.8182

   1

  (40)

  0.1

  0.7

   1

  (45)

  0.1

  0.8273

   1

  (50)

  0.1

0.8455

   1

  (55)

  0.1

0.7455

   1

  (60)

  0.1

0.8636

   1

  (65)

  0.1

0.8182

   1

  (70)

  0.1

0.8273

   1

  (80)

  0.1

0.7727

将上表数据绘制成曲线图如下:

  由上可知:一层隐含层时在节点数为30,50和60时有最优点,三个最优点的识别成功率相差并没有太大。综合网络复杂程度和训练时间的因素来看,相比于节点数为50和60,节点数为30个为更佳选择。

3、探讨隐含层层数对识别成功率的影响:

隐含层层数

隐含层节点数

训练步长

识别成功率

   1

  (10)

  0.1

   0.4727

   2

 (10 ,10)

  0.1

   0.8364

   3

 (10 ,10 ,10)

  0.1

   0.7727

   4

(10,10,10,10)

  0.1

   0.7636

   5

(10,10,10,10,10)

  0.1

   0.8182

   6

(10,10,10,10,10,10)

  0.1

   0.7727

将上表数据绘制成曲线图如下:

  由上图可知,当隐含层>=2后识别成功率基本稳定在0.8左右,层数的增加使网络复杂性大幅增加但识别成功率并没有得到较大提高,所以,本问题下,隐含层层数选择2层即可。

4、探讨训练步长对识别成功率的影响:

隐含层层数

隐含层节点数

训练步长

识别成功率

   2

  (30,30)

  0.1

   0.8818

   2

  (30,30)

  0.2

   0.8364

   2

  (30,30)

  0.3

   0.8636

   2

  (30,30)

  0.05

   0.8636

   2

  (30,30)

  0.02

   0.9364

   2

(30,30)

  0.01

   0.8636

将上表数据绘制成曲线图如下:

  

    由上可见,当训练步长取0.02时,有一个最优点达到94%,识别成功率高过其它数据的平均值(86%)约8%。这一幅度可以说明在本次实验中,训练步长应该选择0.02。初步考虑应该是(1)相较于更大的步长,0.02可以更好的寻找到最优点,避免“跨越”最优点。(2)相较于更小的步长,0.02可以避免落入局部最优。

六、结果讨论

  1、本实验充分说明了数据预处理的重要性。通过预处理,可以将大量的无益于分类的特征消除,一方面既减少了神经网络输入节点,降低了网络复杂度,减少了训练时间;另一方面,同时也提高了有用信息的比例,有利于提高神经网络的分类效果。

  2、在调整神经网络的隐含层层数,节点数和训练步长这几个参数时,应该从简单到复杂,以表格的形式罗列。这不仅极大地增加了不同参数效果的可观性,便于较快的查找到较为适合的参数,同时也是一个正常的学习过程:由欠拟合渐渐可以较好地提取到样本特征再到过拟合。我们可以从这个过程清楚神经网络处于什么阶段:欠拟合,较好学习还是过拟合。这又方便了我们调参和分析。

  3、本实验采用了5倍交叉验证法,这一方法虽然极大的增加了代码运行时间(大概花费十几分钟),但是这体现了实验的严谨性,这一点很重要。

代码和数据集可以在这里下载:matlab代码和数据集.zip-机器学习文档类资源-CSDN下载里面几个.m文件是相互调用关系,其中my_train是主函数更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_46579610/39154915

这里给出代码:

function [train,test] = read_picture(model,file_address)
%读取一种数字图片信息,返回训练集和测试集
picture_num=55;%图片数量
number=randperm(picture_num);%产生1到55随机整数,打散样本
train=[];
test=[];
%将55个样本分为5份,根据不同情况设置不同测试集和训练集

%最后一组作为测试集
if model==1
for i=1:44%训练集
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));%读取一张图片
    x=rgb2gray(x);%灰度化处理
    x=im2double(x);%转化为double类型,不转化会出错
    [a b]=find(x~=1);%二值化处理
    x=x(min(a):max(a),min(b):max(b));%只选取数字所在区域
    %imshow(x);%画图查看是否处理成功
    x=imresize(x,[12,12]);%压缩图片
    x=reshape(x,144,1);%将矩阵转化为列向量
   train=[train x];
end
for i=45:55%测试集
    pic_name=strcat(num2str(number(i)),'.png');
    y=imread(strcat(file_address,pic_name));
    y=rgb2gray(y);
    y=im2double(y);
    [c d]=find(y~=1);
    y=y(min(c):max(c),min(d):max(d));
    %imshow(y);
    y=imresize(y,[12,12]);
    y=reshape(y,144,1);
   test=[test y];
end
end

%第四组作为测试集
if model==2
for i=1:33
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
for i=34:44
    pic_name=strcat(num2str(number(i)),'.png');
    y=imread(strcat(file_address,pic_name));
    y=rgb2gray(y);
    
        y=im2double(y);
    [c d]=find(y~=1);
    y=y(min(c):max(c),min(d):max(d));
    
    y=imresize(y,[12,12]);
    y=reshape(y,144,1);
   test=[test y];
end
for i=45:55
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
end

%第三组作为测试集
if model==3
for i=1:22
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
for i=23:33
    pic_name=strcat(num2str(number(i)),'.png');
    y=imread(strcat(file_address,pic_name));
    y=rgb2gray(y);
    
        y=im2double(y);
    [c d]=find(y~=1);
    y=y(min(c):max(c),min(d):max(d));
    
    y=imresize(y,[12,12]);
    y=reshape(y,144,1);
   test=[test y];
end
for i=34:55
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
end

%第二组作为测试集
if model==4
for i=1:11
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
for i=12:22
    pic_name=strcat(num2str(number(i)),'.png');
    y=imread(strcat(file_address,pic_name));
    y=rgb2gray(y);
    
        y=im2double(y);
    [c d]=find(y~=1);
    y=y(min(c):max(c),min(d):max(d));
    
    y=imresize(y,[12,12]);
    y=reshape(y,144,1);
   test=[test y];
end
for i=23:55
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
end

%第一组作为测试集
if model==5
    for i=1:11
    pic_name=strcat(num2str(number(i)),'.png');
    y=imread(strcat(file_address,pic_name));
    y=rgb2gray(y);
    
        y=im2double(y);
    [c d]=find(y~=1);
    y=y(min(c):max(c),min(d):max(d));
    
    y=imresize(y,[12,12]);
    y=reshape(y,144,1);
   test=[test y];
    end
for i=12:55
    pic_name=strcat(num2str(number(i)),'.png');
    x=imread(strcat(file_address,pic_name));
    x=rgb2gray(x);
    
    x=im2double(x);
    [a b]=find(x~=1);
    x=x(min(a):max(a),min(b):max(b));
    
    x=imresize(x,[12,12]);
    x=reshape(x,144,1);
   train=[train x];
end
end

end

function [net] = init_net(input,output)

T=[30 30];
net=newff(input,output,T);
net.trainParam.goal=0.00001;
net.trainParam.lr=0.02;
net.trainParam.min_grad = 1e-6;
net.trainParam.epochs=100;
end

function [success_rate] = my_train()
%存储数据的文件地址,在运行前要根据自己的数据文件所在地址修改并且设置好路径
%图片数据就使用我附带的文件夹

file_address={'D:\Desktop\homework\big_homework\img\sample0\';
    'D:\Desktop\homework\big_homework\img\sample1\';
    'D:\Desktop\homework\big_homework\img\sample2\';
    'D:\Desktop\homework\big_homework\img\sample3\';
    'D:\Desktop\homework\big_homework\img\sample4\';
    'D:\Desktop\homework\big_homework\img\sample5\';
   'D:\Desktop\homework\big_homework\img\sample6\';
    'D:\Desktop\homework\big_homework\img\sample7\';
   'D:\Desktop\homework\big_homework\img\sample8\';
    'D:\Desktop\homework\big_homework\img\sample9\'};
%生成训练标签
a=eye(10,10);
total_tag=[];
for i=1 :10
     tag=[];
    for j=1 :44
        tag=[tag a(:,i)];
    end
   total_tag=[total_tag tag];
end
%生成测试标签
test_tag=[];
for i=1 :10
     tag=[];
    for j=1 :11
        tag=[tag i];
    end
  test_tag=[test_tag tag];
end
%5倍交叉验证
total_error_rate=0;
for i=1:3%重复3次
error=0;
for model= 1:5%随机划分5等份
 
model=1;
 %读取数据
total_train=[];
total_test=[];
    for i=1: 10
    [one_train,one_test] = read_picture(model,file_address{i});
    total_train=[total_train one_train];
     total_test=[total_test one_test];
    end


%初始化网络
net = init_net(total_train,total_tag);
%训练网络
net=train(net,total_train,total_tag);
%测试网络
test_output=sim(net,total_test);
label_train=[];
%将测试集的到的输出转化为元素是0或1的向量
for i=1:110
    label_one=find(test_output(:,i)==max(test_output(:,i)));
    label_train=[label_train label_one];
end

error_matrix=test_tag-label_train;
error_num=sum(any(error_matrix,1));%统计非零列的个数,即分类错误个数

error=error+error_num;
end
error_rate= error/550;%统计一次交叉验证的错误率
total_error_rate=total_error_rate+error_rate;
end
total_error_rate=total_error_rate/3;
success_rate=1-total_error_rate;%计算正确率

end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于神经网络实现手写数字识别(matlab) 的相关文章

  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • 2D 网格的纹理贴图

    我有一组点 x y meshgrid 1 N 1 M 在常规二维上定义 N x M网格 我还有另一组要点 u v 这是原始网格的一些变形 即 u v f x y 但是我没有实际的f导致变形 如何将纹理映射到由定义的 变形 网格u v 即 给
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 在 Matlab/Java 中将手部运动建模为 3D 曲线

    我只需要一些关于我遇到的问题 在哪里查看等的指导 我在我的一个项目中使用了运动跟踪手套 它返回每个手指和手掌的 X Y 和 Z 值 我想做的是首先根据这些坐标创建每个手指运动的表示 然后将它们每个附加到手掌的运动 以获得手的表示 一旦我完成
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • 从 3 个向量创建等值线图

    我正在尝试根据这些数据创建等高线图 pH D Tur 5 10 3 79 18918919 5 50 6 92 97297297 5 00 0 50 09009009 5 00 6 90 36036036 5 10 9 91 0810810
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 在每次迭代中使用 for 循环的索引命名图像

    我正在使用 MATLAB 进行图像处理项目 我使用 for 循环在每次循环迭代时生成某种图像数据 图像大小不同 我的问题是如何阻止它在下一次迭代中覆盖图像 Img i j data 理想情况下我希望它有 Img 1 data for 1st
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 如何将条形图的 XtickLabels 向左移动?

    我目前正在尝试创建频率直方图 为此 我必须创建一个条形图 条形图之间没有空格 然而 这集中于XTickLabels在酒吧的中间 由于它是一个直方图 我希望数值位于每个条形之间的线上 以便它可以直观地指示间隔 本质上 我需要将所有刻度标签移至
  • 在 Matlab 中保存当前运行的脚本

    有没有办法保存Matlab中当前运行的脚本 我有一个脚本 它会自动备份一组脚本 但如果我更改了当前脚本 则保存的版本将过期 也许可以调用一些java Thanks 在 Yair Altman 网站上的某个地方 请参阅我的其他答案中的链接 他

随机推荐

  • linux top命令详解

    一 top简介 top命令经常用来监控linux的系统状况 是常用的性能分析工具 能够实时显示系统中各个进程的资源占用情况 在Linux操作系统中 top是使用最频繁 也是比较全的一个命令 Top命令类似于Windows系统的任务管理器工具
  • python找不到reshape_python – AttributeError:’Tensor’对象没有属性’reshape’

    我想写一个去噪自动编码器 为了可视化的目的 我想打印出损坏的图像 这是我想要显示损坏图像的测试部分 def corrupt x noise tf random normal shape tf shape x mean 0 0 stddev
  • 调速阀------电磁阀

    目录 调速阀 节流阀简图的理解 安装方式 注意 安装注意事项 电磁阀 1 直动式电磁阀 2 分步直动电磁阀 3 先导式电磁阀 二位二通电磁阀 二位三通电磁阀 二位四通电磁阀 三位三通电磁阀 三位四通电磁阀 管道联系式电磁阀 直接控制式电磁阀
  • 芷菏随身wifi14.5 相关教程

    芷菏随身wifi 芷菏都知道 sim一般都是没有密码 直接可以切换的 是可以直接用ARDC连接投屏到电脑上的 按住随身wifi上的按钮 进入9008模式 可以将随身wifi刷boot模块 再从投屏中修补面具 起到root的效果 这款sim1
  • python发送邮件(带附件)

    usr bin python coding UTF 8 import logging import smtplib from email mime multipart import MIMEMultipart from email mime
  • jquery mobile和ajax,使用jquery mobile不可忽视的细节

    jQuery Mobile 是创建移动WEB应用程序的框架 在学习和使用该框架的过程中 有一些心得想要和大家分享一下 一 框架 因为是移动端开发 所以不要忘了下面这个重要的meta标签哦 使用jquery mobile要引入相应的css文件
  • 数据的探索性分析

    探索一下 数据分析的起点 数据分类 一 描述性分析 整理数据 定义 主要作用 可视化技术 定义 主要作用 常用方法 二 相关性分析 分析数据 定义 主要作用 相关性分类 相关性测定 三 假设检验 分析数据 定义 作用 步骤 相对理论 常见的
  • 对某底层硬件模块编写底层程序的主要步骤及经验

    一 禁止硬件模块运行 配置好相关寄存器 这里的硬件模块是指那些CPU发一些指令后就能独立工作的模块 二 置位硬件模块控制寄存器的使能位 使能硬件模块 三 明确功能 搞清楚哪些工作是由硬件来做的 哪些该由软件来执行 四 当由硬件模块来做的工作
  • NAPI(New API)的一些浅见

    NAPI真的是kernel开发者词穷想的名字吧 你看看kernel里面各种名字 不知道为啥就不能起个好听点的 言归正传 wiki https en wikipedia org wiki New API 给出的解释是NAPI是一种用于网络设备
  • PyTorch基础练习-task4(用PyTorch实现多层网络)

    PyTorch基础练习 task4 一 引入模块 读取数据 二 构建网络模型 三 损失函数与优化器 四 开始训练模型 五 模型预测结果评估 一 引入模块 读取数据 从sklearn包中直接加载糖料病数据集 二 构建网络模型 三 损失函数与优
  • 【uniapp】uni-datetime-picker组件修改分钟选项为每15分钟的时间间隔 (0 15 30 45)

    一开始没打算写这个功能实现 毕竟不是自己写的组件 而是去改uniapp的扩展组件 但是确实在修改的时候上网查 没有查到关于这种功能实现的准确信息 所以在功能完成后也写一份 希望能给需要的人一个参考 做项目遇到一个关于时间预约的功能 最开始给
  • JetBrains全家桶(IDEA、Pycharm等各个产品)在国内高速下载地址

    JetBrains产品在国内有CDN下载通道 下面给出各个产品的下载链接 在某些情况下 官网无法访问 可以使用下面的链接直接下载 只需要照模样修改后缀名和年份版本号即可 操作系统后缀 Win exe 安装版 Win win zip 解压版
  • MySQL按条件删除指定数据(删除整行)

    delete from tb where update tb set string helloworld where name louyujing and type 1
  • Frame,Panel和三种布局管理器

    窗体Frame 举例 单个窗体 frame窗体存在在内存中 看不见 Frame frame new Frame 我的JAVA窗体 设置窗体的可见性 frame setVisible true 设置窗体的尺寸 frame setSize 40
  • 基于python、keras的鸟类分类识别——深度学习举一反三案例

    界面用tkinter来制作 这是一个深度学习的练习项目 目前是1 0版本以后会逐步完善
  • STM32F1和F4的GPIO口模式设置以及对应关系

    目录 GPIO端口8种模式 STM32F103的GPIO配置 STM32F407的GPIO配置 F4的GPIO的8种模式配置 GPIO端口8种模式 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 推挽输出 推挽复用功能 开漏复用功能 查看
  • Java十万字笔记(带索引)

    目录 Java类与对象学习学习路线 名词的别称 权限修饰符 访问控制权限 属性默认值 类与对象定义 对象的定义和使用 成员属性的权限 构造方法 区别 深拷贝和浅拷贝 成员属性封装 构造重载实例 为何要封装 引用传递 浅拷贝 与垃圾分析 匿名
  • Vue使用AMapUI,JSAPI2.0拖拽定位无法获取定位问题

    在Amap 高德地图 自2021年12月02日升级 升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 如果这里没有没有配备安全密钥的话 会导致INVALID USER SCODE错误 这个问题 需要在加载地图之前配置安全秘
  • Hibernate学习笔记 开始学习

    Hibernate简介 Hibernate是一个优秀的对象关系映射 ORM 框架 如果你有使用纯JDBC写过一个类似博客之类的小程序的话 就知道编写JDBC语句以及转化结果集为Java对象是一件非常繁复的事情 利用Hibernate这样的O
  • 基于神经网络实现手写数字识别(matlab)

    实验目的 在matlab平台上 采用神经网络实现手写数字识别 在实验过程中 1 初步探讨数据集预处理的作用 2 增加对神经网络的理解 探讨隐含层层数 节点数和训练步长对识别成功率的影响 找到较佳的参数 3 应用交叉验证法评估训练模型的优劣