GPUなしで画像分類×機械学習をする

※本ブログにはアフィリエイト広告が含まれています。

こんにちは、のりはらです。

最近、色々と環境が変わりました。そんな中思ったのは「nvidiaのGPUがあるって結構贅沢なことかもしれない」と思いました。

もしかしたら、まだ結構GPUを持っていない人、いるんじゃないだろうか、と考えました。そして、こんな疑問を持ちました。

疑問:「GPUなしで画像分類ってできるんだろうか? お金はないけどとりあえずお試しだけでもしたいなあ」
結論:できる

というわけで、コードを書いてみましたので共有です。
※以下のコードについて動作保証は一切できません。よろしくお願いします。

①lightGBMを使ってみる。

lightGBMについては調べてみてください。

これでmnistで精度97%ぐらいでした。

lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import fetch_openml
import pickle




train = False
load_data = False

if load_data:
    # Load the MNIST dataset
    mnist = fetch_openml('mnist_784', version=1)
    X, y = mnist['data'], mnist['target']
    y = y.astype(int)  # Convert target to integers
    
    # Save the dataset to a pickle file
    with open('mnist_dataset.pkl', 'wb') as f:
        pickle.dump((X, y), f)

# Load the dataset from the pickle file
with open('mnist_dataset.pkl', 'rb') as f:
    X_loaded, y_loaded = pickle.load(f)

print(X_loaded.shape, y_loaded.shape)

# データを訓練セットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X_loaded, y_loaded, test_size=0.2, random_state=42)

if train:
    
    # LightGBMのデータセット形式に変換
    train_data = lgb.Dataset(X_train, label=y_train)
    test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)
    
    # パラメータ設定
    params = {
        'objective': 'multiclass',
        'num_class': 10,  # クラス数(MNISTは0から9の10クラス)
        'metric': 'multi_logloss',
    }
    
    # モデルの学習
    num_round = 100
    bst = lgb.train(params, train_data, num_round, valid_sets=[test_data])
    
    
    # モデルの保存
    bst.save_model('lightgbm_model.txt')

else:
    # モデルの読み込み(必要な場合)
    bst = lgb.Booster(model_file='lightgbm_model.txt')



# テストデータで予測
y_pred = bst.predict(X_test, num_iteration=bst.best_iteration)
y_pred = y_pred.argmax(axis=1)

# 精度の計算
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

もっともシンプルなコードですが、このコードではmnistのようにサイズが小さい画像にしか対応できません。入力に、mnistの画像を圧縮せずに直接使用しているためです。一般的な画像分類のタスクでは、画像サイズが大きく、さらに複雑な画像を使用する必要があるはずです。

ここから先は

3,877字

¥ 300

期間限定!PayPayで支払うと抽選でお得

この記事が気に入ったらチップで応援してみませんか?