<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Deep Learning on Yoshiyuki Kurose</title><link>http://yoshiyuki-140.github.io/tags/deep-learning/</link><description>Recent content in Deep Learning on Yoshiyuki Kurose</description><generator>Hugo</generator><language>ja-JP</language><lastBuildDate>Tue, 28 Jul 2026 09:47:17 +0900</lastBuildDate><atom:link href="http://yoshiyuki-140.github.io/tags/deep-learning/index.xml" rel="self" type="application/rss+xml"/><item><title>Rustで深層学習の推論基盤構築</title><link>http://yoshiyuki-140.github.io/posts/rust-ml-inference-infrastructure/</link><pubDate>Tue, 28 Jul 2026 09:47:17 +0900</pubDate><guid>http://yoshiyuki-140.github.io/posts/rust-ml-inference-infrastructure/</guid><description>&lt;h1 id="背景"&gt;背景&lt;/h1&gt;
&lt;p&gt;書籍「ゼロから作るDeep Learning」(以降，「ゼロつく」と呼びます)のRust実装を研究室の勉強会で行うことになりました．
基本的に勉強会なので，どこまでやるかは自分次第です．
私は，自作モデルでMNISTデータセットの手書き数字認識の推論精度を95%以上にすることを目標としました．&lt;/p&gt;
&lt;h1 id="目的"&gt;目的&lt;/h1&gt;
&lt;p&gt;本記事では，後学のため，学習済みモデルを動作させて精度を計算する部分までをまとめます．
つまり，第3章の手書き数字認識を学習済みモデルで解くところまでです．&lt;/p&gt;
&lt;h1 id="手法"&gt;手法&lt;/h1&gt;
&lt;p&gt;実験には研究室から貸与されたノートPCを使用しました．
スペック詳細は割愛します．
OSにはWSL(Windows Subsystem for Linux)上のUbuntu 24.04.4 LTSを用い，ビルドと実行はすべてこの環境で行いました．
また，実験に際してエディタにはVSCodeを利用し，Rust公式が開発している拡張機能である&lt;code&gt;rust-analyzer&lt;/code&gt;を導入しました&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;．&lt;/p&gt;
&lt;p&gt;プロジェクトにはRustのワークスペース機能を利用しました&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;．
ワークスペース機能は，複数のCargoプロジェクトをまとめて管理するための機能です．
採用した理由は，推論用のコードと学習用のコードを別々のプロジェクトに分けたかったためです．
また，ワークスペースとして構成しておくことで，先述の&lt;code&gt;rust-analyzer&lt;/code&gt;が各プロジェクトを正しく読み込めるという利点もあります．
ディレクトリ構造は以下のとおりです．&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ tree -L &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Cargo.lock
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Cargo.toml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── README.md
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── common &lt;span style="color:#75715e"&gt;# 共通で使用するコード(MNISTデータセットを読み出すコード等)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── data &lt;span style="color:#75715e"&gt;# MNISTデータセット置き場&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── learn &lt;span style="color:#75715e"&gt;# 学習に使用するコード(Cargoプロジェクト)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── predict &lt;span style="color:#75715e"&gt;# 推論を行うコード(Cargoプロジェクト)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── target &lt;span style="color:#75715e"&gt;# ビルド済みバイナリ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── weight &lt;span style="color:#75715e"&gt;# 重みとバイアスの保存場所&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; directories, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; files
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このうち&lt;code&gt;learn&lt;/code&gt;は，今後の学習フェーズの実装を見越して用意したもので，今回は中身が空の状態です．
本記事で実装したのは推論のみであるため，実際に使用したのは以下の4つのディレクトリです．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;predict&lt;/code&gt; : ニューラルネットワークの構造体と推論ロジックの実装&lt;/li&gt;
&lt;li&gt;&lt;code&gt;common&lt;/code&gt; : シグモイド関数・ソフトマックス関数・MNISTデータ読み出しコード&lt;/li&gt;
&lt;li&gt;&lt;code&gt;weight&lt;/code&gt; : 学習済みの重み(pickle形式)と，pickle形式データをnpy形式に変換するためのPythonスクリプト&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt; : MNISTデータセット&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以降では，各ディレクトリの構造と，含まれるソースコードについて説明します．&lt;/p&gt;</description></item></channel></rss>