{"id":43,"date":"2013-10-05T19:57:04","date_gmt":"2013-10-05T10:57:04","guid":{"rendered":"https:\/\/www.dogrow.net\/nnet\/?p=43"},"modified":"2025-06-11T22:48:54","modified_gmt":"2025-06-11T13:48:54","slug":"blog4","status":"publish","type":"post","link":"https:\/\/www.dogrow.net\/nnet\/blog4\/","title":{"rendered":"(4) \u30b7\u30f3\u30d7\u30eb\u69cb\u6210\u306e\u521d\u7248\u306f\u6b63\u89e3\u738791%"},"content":{"rendered":"<h1 class=\"my_h\">1. \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4ed5\u69d8<\/h1>\n<p>\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5165\u9580\u66f8\u306b\u8f09\u3063\u3066\u3044\u308b\u666e\u901a\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210\u3067\u5b9f\u88c5\u3057\u3066\u307f\u305f\u3002<\/p>\n<p>\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4ed5\u69d8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<br \/>\n(1) MNIST\u753b\u50cf\u30c7\u30fc\u30bf60,000\u679a\u3092\u5b66\u7fd2<br \/>\n(2) MNIST\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf 10,000\u679a\u3092\u30c6\u30b9\u30c8<br \/>\n(3) \u5165\u529b\u5c64\u306e\u30e6\u30cb\u30c3\u30c8\u6570\u306f28&#215;28\u306e784\u500b<br \/>\n(4) \u51fa\u529b\u5c64\u306e\u30e6\u30cb\u30c3\u30c8\u6570\u306f\u6570\u5b570\uff5e9\u306b\u5bfe\u5fdc\u3059\u308b10\u500b<br \/>\n(5) \u96a0\u308c\u5c64\u306e\u5c64\u6570\u3068\u5404\u5c64\u306e\u30e6\u30cb\u30c3\u30c8\u6570\u306f\u5f15\u6570\u3067\u4efb\u610f\u306b\u6307\u5b9a\u53ef\u80fd<br \/>\n(6) \u6570\u5b57\u5225\u306b\u6b63\u89e3\u7387\u3092\u8868\u793a<br \/>\n(7) \u5404\u5c64\u306e\u6d3b\u6027\u5316\u95a2\u6570\u306fSigmoid<br \/>\n(8) \u8aa4\u5dee\u95a2\u6570\u306f\u4e8c\u4e57\u548c\u8aa4\u5dee<br \/>\n(9) Epoch\u6570\u306f1<br \/>\n(10) 1\u5b66\u7fd2\u30c7\u30fc\u30bf\u306e\u5b66\u7fd2\u3054\u3068\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u66f4\u65b0<\/p>\n<h1 class=\"my_h\">2. \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u7d50\u679c<\/h1>\n<p>\u9069\u5f53\u306b\u9078\u3093\u3060\u51689\u30d1\u30bf\u30fc\u30f3\u306e\u5c64\u69cb\u6210\u3092\u8a66\u3057\u305f\u7d50\u679c\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u305f\u3002<br \/>\n\u3053\u306e\u4e2d\u3067\u306f 4\u5c64 [784]-[256]-[64]-[10] \u306e\u6b63\u89e3\u7387 <span class=\"my_fc_blueBBig\">91.9%<\/span> \u304c\u6700\u3082\u9ad8\u304b\u3063\u305f\u3002<\/p>\n<p>(1) 3\u5c64 [784]-[16]-[10] <span class=\"my_fc_blueBBig\">89.0%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:10&gt; tic;NNET_control([784 16 10]);toc;\r\n[ 0]  938 \/  980 ( 95.7%)\r\n[ 1] 1109 \/ 1135 ( 97.7%)\r\n[ 2]  888 \/ 1032 ( 86.0%)\r\n[ 3]  892 \/ 1010 ( 88.3%)\r\n[ 4]  878 \/  982 ( 89.4%)\r\n[ 5]  719 \/  892 ( 80.6%)\r\n[ 6]  889 \/  958 ( 92.8%)\r\n[ 7]  896 \/ 1028 ( 87.2%)\r\n[ 8]  803 \/  974 ( 82.4%)\r\n[ 9]  890 \/ 1009 ( 88.2%)\r\nTotal  8902 \/ 10000 ( 89.0%)\r\nElapsed time is 63.3441 seconds.<\/pre>\n<p>(2) 3\u5c64 [784]-[24]-[10] <span class=\"my_fc_blueBBig\">89.9%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:7&gt; tic;NNET_control([784 24 10]);toc;\r\n[ 0]  949 \/  980 ( 96.8%)\r\n[ 1] 1109 \/ 1135 ( 97.7%)\r\n[ 2]  907 \/ 1032 ( 87.9%)\r\n[ 3]  907 \/ 1010 ( 89.8%)\r\n[ 4]  887 \/  982 ( 90.3%)\r\n[ 5]  708 \/  892 ( 79.4%)\r\n[ 6]  882 \/  958 ( 92.1%)\r\n[ 7]  925 \/ 1028 ( 90.0%)\r\n[ 8]  858 \/  974 ( 88.1%)\r\n[ 9]  856 \/ 1009 ( 84.8%)\r\nTotal  8988 \/ 10000 ( 89.9%)\r\nElapsed time is 65.8959 seconds.<\/pre>\n<p>(3) 3\u5c64 [784]-[32]-[10] <span class=\"my_fc_blueBBig\">90.0%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:6&gt; tic;NNET_control([784 32 10]);toc;\r\n[ 0]  950 \/  980 ( 96.9%)\r\n[ 1] 1108 \/ 1135 ( 97.6%)\r\n[ 2]  885 \/ 1032 ( 85.8%)\r\n[ 3]  905 \/ 1010 ( 89.6%)\r\n[ 4]  894 \/  982 ( 91.0%)\r\n[ 5]  718 \/  892 ( 80.5%)\r\n[ 6]  895 \/  958 ( 93.4%)\r\n[ 7]  945 \/ 1028 ( 91.9%)\r\n[ 8]  828 \/  974 ( 85.0%)\r\n[ 9]  869 \/ 1009 ( 86.1%)\r\nTotal  8997 \/ 10000 ( 90.0%)\r\nElapsed time is 71.066 seconds.<\/pre>\n<p>(4) 3\u5c64 [784]-[48]-[10] <span class=\"my_fc_blueBBig\">90.6%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:9&gt; tic;NNET_control([784 48 10]);toc;\r\n[ 0]  955 \/  980 ( 97.4%)\r\n[ 1] 1117 \/ 1135 ( 98.4%)\r\n[ 2]  909 \/ 1032 ( 88.1%)\r\n[ 3]  931 \/ 1010 ( 92.2%)\r\n[ 4]  920 \/  982 ( 93.7%)\r\n[ 5]  746 \/  892 ( 83.6%)\r\n[ 6]  892 \/  958 ( 93.1%)\r\n[ 7]  917 \/ 1028 ( 89.2%)\r\n[ 8]  824 \/  974 ( 84.6%)\r\n[ 9]  847 \/ 1009 ( 83.9%)\r\nTotal  9058 \/ 10000 ( 90.6%)\r\nElapsed time is 74.398 seconds.<\/pre>\n<p>(5) 3\u5c64 [784]-[64]-[10] <span class=\"my_fc_blueBBig\">90.8%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:1&gt; tic;NNET_control([784 64 10]);toc;\r\n[ 0]  949 \/  980 ( 96.8%)\r\n[ 1] 1109 \/ 1135 ( 97.7%)\r\n[ 2]  907 \/ 1032 ( 87.9%)\r\n[ 3]  901 \/ 1010 ( 89.2%)\r\n[ 4]  898 \/  982 ( 91.4%)\r\n[ 5]  745 \/  892 ( 83.5%)\r\n[ 6]  898 \/  958 ( 93.7%)\r\n[ 7]  929 \/ 1028 ( 90.4%)\r\n[ 8]  859 \/  974 ( 88.2%)\r\n[ 9]  888 \/ 1009 ( 88.0%)\r\nTotal  9083 \/ 10000 ( 90.8%)\r\nElapsed time is 81.1507 seconds.<\/pre>\n<p>(6) 3\u5c64 [784]-[96]-[10] <span class=\"my_fc_blueBBig\">90.4%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:4&gt; tic;NNET_control([784 96 10]);toc;\r\n[ 0]  953 \/  980 ( 97.2%)\r\n[ 1] 1114 \/ 1135 ( 98.1%)\r\n[ 2]  910 \/ 1032 ( 88.2%)\r\n[ 3]  915 \/ 1010 ( 90.6%)\r\n[ 4]  851 \/  982 ( 86.7%)\r\n[ 5]  720 \/  892 ( 80.7%)\r\n[ 6]  888 \/  958 ( 92.7%)\r\n[ 7]  937 \/ 1028 ( 91.1%)\r\n[ 8]  865 \/  974 ( 88.8%)\r\n[ 9]  888 \/ 1009 ( 88.0%)\r\nTotal  9041 \/ 10000 ( 90.4%)\r\nElapsed time is 112.633 seconds.<\/pre>\n<p>(7) 3\u5c64 [784]-[128]-[10] <span class=\"my_fc_blueBBig\">91.5%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:5&gt; tic;NNET_control([784 128 10]);toc;\r\n[ 0]  951 \/  980 ( 97.0%)\r\n[ 1] 1112 \/ 1135 ( 98.0%)\r\n[ 2]  931 \/ 1032 ( 90.2%)\r\n[ 3]  897 \/ 1010 ( 88.8%)\r\n[ 4]  879 \/  982 ( 89.5%)\r\n[ 5]  784 \/  892 ( 87.9%)\r\n[ 6]  892 \/  958 ( 93.1%)\r\n[ 7]  927 \/ 1028 ( 90.2%)\r\n[ 8]  868 \/  974 ( 89.1%)\r\n[ 9]  904 \/ 1009 ( 89.6%)\r\nTotal  9145 \/ 10000 ( 91.5%)\r\nElapsed time is 152.437 seconds.<\/pre>\n<p>(8) 4\u5c64 [784]-[256]-[32]-[10] <span class=\"my_fc_blueBBig\">91.5%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:12&gt; tic;NNET_control([784 256 32 10]);toc;\r\n[ 0]  957 \/  980 ( 97.7%)\r\n[ 1] 1098 \/ 1135 ( 96.7%)\r\n[ 2]  929 \/ 1032 ( 90.0%)\r\n[ 3]  901 \/ 1010 ( 89.2%)\r\n[ 4]  876 \/  982 ( 89.2%)\r\n[ 5]  781 \/  892 ( 87.6%)\r\n[ 6]  899 \/  958 ( 93.8%)\r\n[ 7]  942 \/ 1028 ( 91.6%)\r\n[ 8]  862 \/  974 ( 88.5%)\r\n[ 9]  902 \/ 1009 ( 89.4%)\r\nTotal  9147 \/ 10000 ( 91.5%)\r\nElapsed time is 301.459 seconds.<\/pre>\n<p>(9) 4\u5c64 [784]-[256]-[64]-[10] <span class=\"my_fc_blueBBig\">91.9%<\/span><\/p>\n<pre class='my_pre_octave'>\r\noctave:11&gt; tic;NNET_control([784 256 64 10]);toc;\r\n[ 0]  960 \/  980 ( 98.0%)\r\n[ 1] 1109 \/ 1135 ( 97.7%)\r\n[ 2]  904 \/ 1032 ( 87.6%)\r\n[ 3]  882 \/ 1010 ( 87.3%)\r\n[ 4]  909 \/  982 ( 92.6%)\r\n[ 5]  786 \/  892 ( 88.1%)\r\n[ 6]  910 \/  958 ( 95.0%)\r\n[ 7]  936 \/ 1028 ( 91.1%)\r\n[ 8]  874 \/  974 ( 89.7%)\r\n[ 9]  921 \/ 1009 ( 91.3%)\r\nTotal  9191 \/ 10000 ( 91.9%)\r\nElapsed time is 309.785 seconds.<\/pre>\n<h1 class=\"my_h\">3. \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h1>\n<h3 class=\"my_h\">(1) NNET_control.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction NNET_control( num_unit_of_each_layer )\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;% \u5b66\u7fd2\u753b\u50cf\u30fb\u30e9\u30d9\u30eb\u3001\u30c6\u30b9\u30c8\u753b\u50cf\u30fb\u30e9\u30d9\u30eb\u3092\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u307f&lt;\/span&gt;\r\n  &#x5B;train_img, train_lbl] = load_MNIST( &#039;train-images-idx3-ubyte&#039;, &#039;train-labels-idx1-ubyte&#039; );\r\n  &#x5B;test_img,  test_lbl ] = load_MNIST( &#039;t10k-images-idx3-ubyte&#039;,  &#039;t10k-labels-idx1-ubyte&#039;  );\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;% \u5404\u753b\u50cf\u30c7\u30fc\u30bf\u3092 0.0\uff5e1.0\u306e\u7bc4\u56f2\u306b\u6b63\u898f\u5316&lt;\/span&gt;\r\n  train_img = train_img \/ 255;\r\n  test_img  = test_img  \/ 255;\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;% \u6307\u5b9a\u3055\u308c\u305f\u5c64\u6570\u3001\u30e6\u30cb\u30c3\u30c8\u6570\u3067\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u4f5c\u6210&lt;\/span&gt;\r\n  nn = NNET_setup( num_unit_of_each_layer );\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;% \u5b66\u7fd2\u5b9f\u884c&lt;\/span&gt;\r\n  nn = NNET_learn( nn, train_img, train_lbl );\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;% \u30c6\u30b9\u30c8\u5b9f\u884c&lt;\/span&gt;\r\n  result = NNET_test( nn, test_img, test_lbl );\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;% \u30c6\u30b9\u30c8\u7d50\u679c\u3092\u8868\u793a&lt;\/span&gt;\r\n  for i=1: 10\r\n    printf(&#039;&#x5B;%2d] %4d \/ %4d (%5.1f%%) \\n&#039;, i-1, result(i,2), result(i,1), result(i,2)\/result(i,1)*100);\r\n  end\r\n  sum_result = sum(result,1);\r\n  printf(&#039;Total %5d \/ %5d (%5.1f%%) \\n&#039;, sum_result(2), sum_result(1), sum_result(2)\/sum_result(1)*100);\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(2) load_MNIST.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction &#x5B;image label] = load_MNIST( image_file, label_file )\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;%\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  % \u753b\u50cf\u3092\u30ed\u30fc\u30c9\r\n  % \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30ed\u30fc\u30c9\u3057\u305f\u753b\u50cf\u3092 image&#x5B;28]&#x5B;28]&#x5B;60000]\u306e\u914d\u5217\u3067\u51fa\u529b&lt;\/span&gt;\r\n  fid = fopen(image_file,&#039;r&#039;,&#039;b&#039;);\r\n  magic_number      = fread(fid, 1, &#039;int32&#039;);\r\n  number_of_items   = fread(fid, 1, &#039;int32&#039;);\r\n  number_of_rows    = fread(fid, 1, &#039;int32&#039;);\r\n  number_of_columns = fread(fid, 1, &#039;int32&#039;);\r\n  img               = fread(fid, &#x5B;number_of_rows*number_of_columns number_of_items],&#039;uint8&#039;);\r\n  image = permute(reshape(img, number_of_rows, number_of_columns,number_of_items),&#x5B;2 1 3]);\r\n  fclose(fid);\r\n\r\n  &lt;span class=&quot;my_fc_green&quot;&gt;%\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  % \u30e9\u30d9\u30eb\u3092\u30ed\u30fc\u30c9\r\n  % \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30ed\u30fc\u30c9\u3057\u305f\u30e9\u30d9\u30eb\u3092 label&#x5B;10]&#x5B;60000]\u306e\u914d\u5217\u3067\u51fa\u529b&lt;\/span&gt;\r\n  fid = fopen(label_file,&#039;r&#039;,&#039;b&#039;);\r\n  magic_number    = fread(fid, 1,               &#039;int32&#039;);\r\n  number_of_items = fread(fid, 1,               &#039;int32&#039;);\r\n  lbl             = fread(fid, number_of_items, &#039;uint8&#039;);\r\n  idx             = &#x5B;1:number_of_items]&#039;;\r\n  lblidx          = lbl * number_of_items + idx;\r\n  label           = zeros(number_of_items,10);\r\n  label(lblidx)   = 1;\r\n  label           = label&#039;;\r\n  fclose(fid);\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(3) NNET_setup.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction nn = NNET_setup( num_unit_of_each_layer )\r\n\r\n  % \u4e71\u6570\u751f\u6210\u5668\u3092\u521d\u671f\u5316\r\n  rand(&#039;seed&#039;, 0);\r\n\r\n  % \u6307\u5b9a\u3055\u308c\u305f\u5c64\u6570\u3092\u53d6\u5f97\r\n  num_layer = numel( num_unit_of_each_layer );\r\n\r\n  % \u5168\u5c64\u3092\u521d\u671f\u5316\r\n  for i=2 : num_layer\r\n\r\n    % \u73fe\u5c64\u3068\u524d\u5c64\u306e\u30e6\u30cb\u30c3\u30c8\u6570\u3092\u53d6\u5f97\r\n    num_unit_pre = num_unit_of_each_layer( i - 1 );\r\n    num_unit     = num_unit_of_each_layer( i );\r\n\r\n    % \u5404\u7d50\u5408\u7dda\u306e\u8377\u91cd\u3092 -1\uff5e1\u306e\u4e00\u69d8\u5206\u5e03\u4e71\u6570\u3067\u521d\u671f\u5316\r\n    nn.layer{i}.weight = -1 + rand( num_unit, num_unit_pre ) * 2;\r\n\r\n    % \u30d0\u30a4\u30a2\u30b9\u3092\u521d\u671f\u5316\r\n    nn.layer{i}.bias = zeros( num_unit, 1 );\r\n  end\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(4) NNET_learn.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction nn = NNET_learn( nn, train_img, train_lbl )\r\n\r\n  % \u5b66\u7fd2\u30c7\u30fc\u30bf\u6570\u3092\u53d6\u5f97\r\n  num_data = size( train_img, 3 );\r\n\r\n  % \u5b66\u7fd2\u30c7\u30fc\u30bf\u3092\u30b7\u30e3\u30c3\u30d5\u30eb\r\n  randvector = randperm( num_data );\r\n  train_img  = train_img(:,:,randvector);\r\n  train_lbl  = train_lbl(:,randvector);\r\n\r\n  % \u5168\u5b66\u7fd2\u753b\u50cf\u30921\u500b\u305a\u3064\u5b66\u7fd2\u3055\u305b\u308b\r\n  for i=1 : num_data\r\n    % \u9806\u4f1d\u64ad\r\n    nn = NNET_propagation_forward( nn, train_img(:,:,i) );\r\n\r\n    % \u8aa4\u5dee\u9006\u4f1d\u64ad\r\n    nn = NNET_propagation_back( nn, train_lbl(:,i) );\r\n\r\n    % \u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u66f4\u65b0\r\n    nn = NNET_update( nn, 0.05 );\r\n  end\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(5) NNET_propagation_forward.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction nn = NNET_propagation_forward( nn, train_img )\r\n\r\n  % \u5165\u529b\u5c64\u306e\u51fa\u529b\u5024\u3092\u8a18\u61b6\r\n  nn.layer{1}.out = train_img(:);   % &#x5B;n0]&#x5B;1]\r\n\r\n  % \u5168\u5c64\u306b\u3064\u3044\u3066\u9806\u4f1d\u64ad\u3092\u5b9f\u884c\r\n  for i=2 : numel(nn.layer)\r\n\r\n    % a = \u03a3wz + bias    w&#x5B;n1]&#x5B;n0] z&#x5B;n0]&#x5B;1] bias&#x5B;n1]&#x5B;1]\r\n    nn.layer{i}.actprm = nn.layer{i}.weight * nn.layer{i-1}.out + nn.layer{i}.bias;\r\n\r\n    % out = sigmoid(a)   out&#x5B;n1]&#x5B;1]\r\n    nn.layer{i}.out = sigmoid( nn.layer{i}.actprm );\r\n  end\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(6) NNET_propagation_back.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction nn = NNET_propagation_back( nn, train_lbl )\r\n\r\n  % \u5c64\u6570\u3092\u53d6\u5f97\r\n  num_layer = numel(nn.layer);\r\n\r\n  % \u51fa\u529b\u5c64\u3067\u691c\u51fa\u3055\u308c\u305f\u8aa4\u5dee\u91cf\u3068\u9006\u4f1d\u64ad\u3059\u308b\u52fe\u914d\u306e\u521d\u671f\u5024\u3092\u7b97\u51fa\r\n  &#x5B;err, nn.layer{num_layer}.grad] = lossfunc(nn.layer{num_layer}.out, train_lbl);\r\n\r\n  % \u5168\u5c64\u306b\u3064\u3044\u3066\u8aa4\u5dee\u9006\u4f1d\u64ad\u3092\u5b9f\u884c\r\n  for i=num_layer : -1 : 2\r\n\r\n    % \u76f4\u524d\u5c64\u306e\u5404\u30cb\u30e5\u30fc\u30ed\u30f3\u306b\u4f1d\u64ad\u3059\u308b\u52fe\u914d\u3092\u7b97\u51fa\r\n    %  \u03b4out                    \r\n    %  ----- = w x h&#039;(a)        \r\n    %  \u03b4in                     \r\n    %           |       \u03b4out|  \r\n    %  grad = \u03a3|gout x -----|  \r\n    %           |       \u03b4in |  \r\n\r\n    % \u914d\u5217\u8981\u7d20\u6570\u306e\u540c\u30582\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5148\u306b\u8a08\u7b97  grad&#x5B;n1]&#x5B;1] out&#x5B;n1]&#x5B;1]\r\n    derr = nn.layer{i}.grad .* dsigmoid(nn.layer{i}.out);\r\n\r\n    % \u03a3(w\u30fbderr)  w&#x5B;n1]&#x5B;n0] derr&#x5B;n1]&#x5B;1] grad&#x5B;n0]&#x5B;1]\r\n    nn.layer{i-1}.grad = nn.layer{i}.weight&#039; * derr;\r\n\r\n    % \u7d50\u5408\u8377\u91cd\u306e\u4fee\u6b63\u91cf\u3092\u7b97\u51fa\r\n    %  \u03b4E                      \r\n    %  ---- = grad\u30fbh&#039;(a)\u30fbout  \r\n    %  \u03b4w                      \r\n    % IN\u5074\u30e6\u30cb\u30c3\u30c8\uff0dOUT\u5074\u30e6\u30cb\u30c3\u30c8\u306e\u7d44\u307f\u5408\u308f\u305b\u3054\u3068\u306b\u7b97\u51fa out&#x5B;n0]&#x5B;1] derr&#x5B;n1]&#x5B;1] dw&#x5B;n1]&#x5B;n0]\r\n    nn.layer{i}.dweight = derr * nn.layer{i-1}.out&#039;;\r\n\r\n    % \u30d0\u30a4\u30a2\u30b9\u306e\u4fee\u6b63\u91cf\u3092\u7b97\u51fa\r\n    nn.layer{i}.dbias = derr;\r\n  end\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(7) NNET_update.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction nn = NNET_update( nn, ratio )\r\n\r\n  % \u5168\u5c64\u306b\u3064\u3044\u3066\u7d50\u5408\u8377\u91cd\u3068\u30d0\u30a4\u30a2\u30b9\u3092\u66f4\u65b0\r\n  for i=2: numel(nn.layer)\r\n    nn.layer{i}.weight = nn.layer{i}.weight - ratio * nn.layer{i}.dweight;\r\n    nn.layer{i}.bias   = nn.layer{i}.bias   - ratio * nn.layer{i}.dbias;\r\n  end\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(8) NNET_test.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction result = NNET_test( nn, test_img, test_lbl )\r\n\r\n  % \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u6570\u3092\u53d6\u5f97\r\n  num_data = size(test_img, 3);\r\n\r\n  % \u30c6\u30b9\u30c8\u7d50\u679c\u306e\u8a18\u9332\u9818\u57df\u3092\u521d\u671f\u5316\r\n  result = zeros(size(test_lbl,1),2);\r\n\r\n  % \u5168\u5b66\u7fd2\u753b\u50cf\u3092\u30c6\u30b9\u30c8\u5b9f\u884c\r\n  for i=1 : num_data\r\n    % \u9806\u4f1d\u64ad\r\n    nn = NNET_propagation_forward( nn, test_img(:,:,i) );\r\n\r\n    % \u81ea\u52d5\u8b58\u5225\u7d50\u679c(\u51fa\u529b\u5c64\u306e\u51fa\u529b\u5024)\u3092\u53d6\u5f97\r\n    result_lbl = nn.layer{numel(nn.layer)}.out;\r\n    &#x5B;~, idx_cor] = max(test_lbl(:,i));    % \u671f\u5f85\u5024\u3092\u53d6\u5f97\r\n    &#x5B;~, idx_res] = max(result_lbl);       % \u5224\u5b9a\u7d50\u679c\u3092\u53d6\u5f97\r\n\r\n    % \u30c6\u30b9\u30c8\u7d50\u679c\u3092\u8a18\u61b6\r\n    result(idx_cor ,1) = result(idx_cor ,1) + 1;    % \u6570\u5b57\u5225\u306e\u30c6\u30b9\u30c8\u6570+1\r\n    if idx_cor == idx_res\r\n      result(idx_cor ,2) = result(idx_cor ,2) + 1;  % \u6570\u5b57\u5225\u306e\u6b63\u89e3\u6570+1\r\n    end\r\n  end\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(9) sigmoid.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction y = sigmoid( x )\r\n  y = 1 .\/ (1 + exp(-x));\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(10) dsigmoid.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction y = dsigmoid( x )\r\n  y = x .* (1 - x);\r\nend\r\n<\/pre>\n<h3 class=\"my_h\">(11) lossfunc.m<\/h3>\n<pre class=\"brush: matlabkey; title: ; notranslate\" title=\"\">\r\nfunction &#x5B;err grad] = lossfunc( out, lbl )\r\n\r\n  % \u4f1d\u64ad\u3059\u308b\u8aa4\u5dee\u306e\u521d\u671f\u5024\u3092\u7b97\u51fa\r\n  grad  = out - lbl;   % out&#x5B;n1]&#x5B;1] lbl&#x5B;n1]&#x5B;1]\r\n\r\n  % \u8aa4\u5dee\u95a2\u6570\u7a2e\u5225\u306f\u4e8c\u4e57\u548c\u8aa4\u5dee\u3068\u3059\u308b\u3002\r\n  %        1              2         \r\n  % err = ---\u03a3(out - lbl)          \r\n  %        2                        \r\n  err = grad&#039; * grad \/ 2;\r\nend\r\n<\/pre>\n<p><a href=\"https:\/\/www.dogrow.net\/nnet\/blog5\/\">\u6b21\u56de\u300c(5) EPOCH\u6570\u3092\u5897\u3084\u3057\u3066\u6b63\u89e3\u7387\u4e0a\u6607\u300d\u3067\u306f\u3001\u5b66\u7fd2\u3092\u7e70\u308a\u8fd4\u3059\u3053\u3068\u306b\u3088\u308a\u6b63\u89e3\u7387\u3092\u5411\u4e0a\u3055\u305b\u3066\u307f\u308b\u3002<\/a><\/p>\n<hr class=\"my_hr_bottom\">\n","protected":false},"excerpt":{"rendered":"<p>1. \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4ed5\u69d8 \u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5165\u9580\u66f8\u306b\u8f09\u3063\u3066\u3044\u308b\u666e\u901a\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210\u3067\u5b9f\u88c5\u3057\u3066\u307f\u305f\u3002 \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4ed5\u69d8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002 (1) MNIST\u753b\u50cf\u30c7\u30fc\u30bf60,000\u679a\u3092\u5b66\u7fd2 (2) MNIST\u30c6\u30b9\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.dogrow.net\/nnet\/blog4\/\">\u7d9a\u304d\u3092\u8aad\u3080 &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,6],"tags":[],"class_list":["post-43","post","type-post","status-publish","format-standard","hentry","category-mnist","category-6"],"views":8588,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":31,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":2536,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts\/43\/revisions\/2536"}],"wp:attachment":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}