1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

言語処理100本ノック(2020)-74: 正解率の計測(TensorFlow)

Last updated at Posted at 2021-10-11

言語処理100本ノック 2020 (Rev2)「第8章: ニューラルネット」74本目「正解率の計測」記録です。前回ノックに追加して、学習データと評価データに対する正解率を求めます。keras使えば超楽勝です。

記事「まとめ: 言語処理100本ノックで学べることと成果」言語処理100本ノック 2015についてはまとめていますが、追加で差分の言語処理100本ノック 2020 (Rev2)についても更新します。

参考リンク

リンク 備考
74_正解率の計測.ipynb 回答プログラムのGitHubリンク
言語処理100本ノック 2020 第8章: ニューラルネット (PyTorchだけど)解き方の参考
【言語処理100本ノック 2020】第8章: ニューラルネット (PyTorchだけど)解き方の参考
まとめ: 言語処理100本ノックで学べることと成果 言語処理100本ノックまとめ記事
【Keras入門(4)】Kerasの評価関数(Metrics)」 kerasの評価関数使い方

環境

後々GPUを使わないと厳しいので、Goolge Colaboratory使いました。Pythonやそのパッケージでより新しいバージョンありますが、新機能使っていないので、プリインストールされているものをそのまま使っています。

種類 バージョン 内容
Python 3.7.12 Google Colaboratoryのバージョン
google 2.0.3 Google Driveのマウントに使用
tensorflow 2.6.0 ディープラーニングの主要処理

第8章: ニューラルネット

学習内容

深層学習フレームワークの使い方を学び,ニューラルネットワークに基づくカテゴリ分類を実装します.

ノック内容

第6章で取り組んだニュース記事のカテゴリ分類を題材として,ニューラルネットワークでカテゴリ分類モデルを実装する.なお,この章ではPyTorch, TensorFlow, Chainerなどの機械学習プラットフォームを活用せよ.

74. 正解率の計測

問題73で求めた行列を用いて学習データおよび評価データの事例を分類したとき,その正解率をそれぞれ求めよ.

回答

回答結果

学習データに対する正解率が0.8460。4値分類なので、悪くはないですね。

学習データに対する正解率
167/167 [==============================] - 2s 8ms/step - loss: 0.4576 - acc: 0.8460
[0.4576301872730255, 0.8460314273834229]

評価データに対する正解率が0.8488。

評価データに対する結果
21/21 [==============================] - 0s 5ms/step - loss: 0.4579 - acc: 0.8488
[0.4579184055328369, 0.848802387714386]

回答プログラム 74_正解率の計測.ipynb

GitHubには確認用コードも含めていますが、ここには必要なものだけ載せています。

import tensorflow as tf
from google.colab import drive

drive.mount('/content/drive')

def _parse_function(example_proto):
    # 特徴の記述
    feature_description = {
        'title': tf.io.FixedLenFeature([], tf.string),
        'category': tf.io.FixedLenFeature([], tf.string)}
  
  # 上記の記述を使って入力の tf.Example を処理
    features = tf.io.parse_single_example(example_proto, feature_description)
    X = tf.io.decode_raw(features['title'], tf.float32)
    y = tf.io.decode_raw(features['category'], tf.int32)
    return X, y

BASE_PATH = '/content/drive/MyDrive/ColabNotebooks/ML/NLP100_2020/08.NeuralNetworks/'

def get_dataset(file_name):
    ds_raw = tf.data.TFRecordDataset(BASE_PATH+file_name+'.tfrecord')
    return ds_raw.map(_parse_function).shuffle(1000).batch(64)

train_ds = get_dataset('train')
test_ds = get_dataset('test')

model = tf.keras.Sequential(
    [tf.keras.layers.Dense(
        4, 
        activation='softmax',
        use_bias=False,
        input_dim=300, 
        kernel_initializer='random_uniform') ])
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['acc'])
model.summary()

model.fit(train_ds, epochs=100)
model.evaluate(train_ds)
model.evaluate(test_ds)

回答解説

正解率出力

compile関数のパラメータmetricsに正解率を示すaccを渡します。以前、自分で書いた記事「【Keras入門(4)】Kerasの評価関数(Metrics)」を読み返しました。

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['acc'])

評価

evaluate関数を使って訓練データおよび評価データに対して正解率を求めます。

model.evaluate(train_ds)
model.evaluate(test_ds)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?