top of page
  • 執筆者の写真HiSR

ChatGPTとTensorflowを用いたMNIST画像認識

The MNIST database(Modified National Institute of Standards and Technology database)(以下, MNIST)は、0~9の手書き数字の画像データセットです(下図). Yann LeCun氏/Corinna Cortes氏/Christopher J.C. Burges氏によって, 手書き文字データセットのNISTデータベースから抽出&加工して作成されたサブセットです.

ChatGPT(Code Interpreter)に、

「tensorflowとMNISTを使って分類コードを作って」と入力するとコードが自動生成されますが、ここでは生成されたコードをjupyter labで実行した結果を示します。

なお、Code Interpreterを使用するには有料会員になる必要があります($20/month).


//ここから生成!

TensorFlowを使ってMNISTデータセットを用いた分類コードを作成します。MNISTは手書き数字のデータセットで、0から9までの数字が28x28ピクセルの画像として含まれています。このデータセットを使って数字の分類モデルを構築し、訓練してみましょう。

Pythonコードを以下に示します。TensorFlowのバージョンが2.xであることを前提としています。


```python

import tensorflow as tf

from tensorflow.keras.datasets import mnist

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense, Flatten


# MNISTデータをロードして、訓練用とテスト用に分割

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()


# データの前処理

train_images = train_images / 255.0

test_images = test_images / 255.0


# モデルの構築

model = Sequential([

Flatten(input_shape=(28, 28)), # 28x28の画像を1次元に変換

Dense(128, activation='relu'),

Dense(10, activation='softmax') # 出力層(0〜9の数字の分類なので10クラス)

])


# モデルのコンパイル

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])


# モデルの概要を表示

model.summary()


# モデルの訓練

model.fit(train_images, train_labels, epochs=5, batch_size=32, validation_split=0.2)


# テストデータを用いてモデルを評価

test_loss, test_accuracy = model.evaluate(test_images, test_labels)

print(f"Test accuracy: {test_accuracy}")


# 任意の画像で予測を試す場合

# prediction = model.predict(some_image_array)

# ここで、some_image_arrayは予測したい画像のnumpy配列で、サイズは(28, 28)である必要があります。

```


Model: "sequential_1"

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

flatten_1 (Flatten) (None, 784) 0

dense_2 (Dense) (None, 128) 100480

dense_3 (Dense) (None, 10) 1290

=================================================================

Total params: 101,770

Trainable params: 101,770

Non-trainable params: 0

_________________________________________________________________

Epoch 1/5

1500/1500 [==============================] - 2s 1ms/step - loss: 0.2886 - accuracy: 0.9176 - val_loss: 0.1551 - val_accuracy: 0.9578

Epoch 2/5

1500/1500 [==============================] - 2s 1ms/step - loss: 0.1269 - accuracy: 0.9622 - val_loss: 0.1152 - val_accuracy: 0.9652

Epoch 3/5

1500/1500 [==============================] - 2s 1ms/step - loss: 0.0871 - accuracy: 0.9744 - val_loss: 0.1037 - val_accuracy: 0.9695

Epoch 4/5

1500/1500 [==============================] - 2s 1ms/step - loss: 0.0660 - accuracy: 0.9798 - val_loss: 0.0879 - val_accuracy: 0.9719

Epoch 5/5

1500/1500 [==============================] - 2s 1ms/step - loss: 0.0510 - accuracy: 0.9844 - val_loss: 0.0869 - val_accuracy: 0.9739

313/313 [==============================] - 0s 1ms/step - loss: 0.0813 - accuracy: 0.9752

Test accuracy: 0.9751999974250793




```python


```

このコードでは、シンプルな2層のニューラルネットワークを構築しています。訓練データを使ってモデルを訓練し、テストデータを用いてモデルの性能を評価しています。5エポックの訓練を行っているので、必要に応じてエポック数を増減させることができます。

以上のコードを実行すると、MNISTデータセットに対する手書き数字の分類モデルが作成され、テストデータでの精度が表示されるはずです。        // ここまでが生成!


以上のようにMNISTとtensorflowを用いたシンプルな手書き数字の識別コードが出来上がり、十分な精度(0.975)が確認されました。

すぐに業務や研究用途で使用するのは難しいかもしれませんが、生成されたスクリプトを修正するなどして実用的なコードを開発することが可能ではないかと思います。

是非お試しください!

閲覧数:53回0件のコメント

最新記事

すべて表示

ChatGPTを用いた音響解析

「opensmileを使ってfeature importanceを計算して」 以下の通り、概ね妥当なコードを生成していると考えられます。 #開始 OpenSMILEは、オーディオ特徴抽出ライブラリであり、音声データからさまざまな特徴を抽出することができます。特徴重要度(Feature Importance)を計算するためには、通常、機械学習モデルを使用することになります。 具体的には、以下の手順で

bottom of page