GPUなしで画像分類×機械学習をする
※本ブログにはアフィリエイト広告が含まれています。
こんにちは、のりはらです。
最近、色々と環境が変わりました。そんな中思ったのは「nvidiaの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で支払うと抽選でお得
この記事が気に入ったらチップで応援してみませんか?