MNIST データベースとは、0~9の手書き数字を画像としたサンプルファイル群です。
機械学習のための学習データ、テストデータとしてよく用いられます。
Rust にて、これらのファイルをダウンロードして解凍するためのサンプルプログラムを掲載します。
Cargo.toml へのパッケージ定義
まず、Cargo.toml に外部クレートを定義します。
それぞれ次のような用途になります。
Crate | 用途 |
---|---|
reqwest | URL からファイルをダウンロードする |
tokio | main 関数を async として定義する |
flate2 | gz のバイトストリームを解凍する |
File: Cargo.toml
[package]
name = "deep-learning-rs"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
reqwest = "*"
tokio = { version = "*", features = ["full"] }
flate2 = "*"
MINST データファイルのダウンロード&解凍
主処理のサンプルです。
File: main.rs
use flate2::read::GzDecoder;
use std::fs::File;
use std::io::copy;
#[tokio::main]
async fn main() {
let base_url = "http://yann.lecun.com/exdb/mnist/";
let filenames = [
"train-images-idx3-ubyte.gz",
"train-labels-idx1-ubyte.gz",
"t10k-images-idx3-ubyte.gz",
"t10k-labels-idx1-ubyte.gz",
];
for filename in filenames {
let url = format!("{}{}", base_url, filename);
let content = reqwest::get(url).await.unwrap().bytes().await.unwrap();
let mut gz = GzDecoder::new(content.as_ref());
let dst_filename = filename.split('.').next().unwrap();
let mut dst = File::create(dst_filename).unwrap();
copy(&mut gz, &mut dst).unwrap();
}
}
これを実行すると、次の解凍済み 4ファイルが保存されます。
ファイル名 | 内容 |
---|---|
train-images-idx3-ubyte | 学習用イメージ(60000サンプル) |
train-labels-idx1-ubyte | 学習用イメージのラベル |
t10k-images-idx3-ubyte | テスト用イメージ(10000サンプル) |
t10k-labels-idx1-ubyte | テスト用イメージのラベル |
コメント