Rust – MNIST データベースをダウンロードして解凍する

MNIST データベースとは、0~9の手書き数字を画像としたサンプルファイル群です。
機械学習のための学習データ、テストデータとしてよく用いられます。

Rust にて、これらのファイルをダウンロードして解凍するためのサンプルプログラムを掲載します。

Cargo.toml へのパッケージ定義

まず、Cargo.toml に外部クレートを定義します。
それぞれ次のような用途になります。

Crate用途
reqwestURL からファイルをダウンロードする
tokiomain 関数を async として定義する
flate2gz のバイトストリームを解凍する

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テスト用イメージのラベル
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次