からあげ先生のとにかく楽しいAI自作教室

正誤表


元本の記述に関して、自分で気のついた点を記すことにする。 必ずしも全てがバグというわけではなく、私自分の勘違いがあるかもしれないので、その場合は指摘していただけるとありがたいです。


2章 2.6 AIモデルの性能を上げる方法1

MobileNetV2

[2020/03/20追記] 本件に関して github経由で筆者に連絡した ところ、「確認したので、正誤表への追記、コードの修正、サポートページへの追記を行った」と連絡がありました。 現在は ipynb の内容が正しく変更されています。

  p.84 下から3行目
  誤: prediction_layer = tf.keras.layers.Dense(NUM_CLASSES)
  正: prediction_layer = tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')

3 class classficationなので、最後のDense層の activation に対して 'softmax' を指定しないとうまく動作しない。 ちなみに tf.keras.layers.Dense() の activation の default 値は None である。


2章 2.6 AIモデルの性能を上げる方法1

MobileNetV2

  p.87 1行目 〜 3行目
  誤:  1つはデータが少ないため、複雑なモデルを使うと訓練データばかりに適合した過学習状態になり、汎化性能が下がってしまっている可能性があります。
  正: 転移学習の最終層でactivation関数を指定していなかったために、訓練が進みませんでした。activation=softmaxを指定すると正しく学習できます。

N-classes classification の問題では、最終層の非線形関数(activation function)としてsoftmax関数を指定すべき。 softmax 関数で各クラスに属するかどうかの確率分布を計算するべきなので。

この実験結果(accが低い、且つ、 val_accが低い)を見てモデルが過学習(overfitting)であると言うのは間違いである。 acc (= accuracy, 正解率)の値が低いことから、数少い訓練データにすら適合できていない underfitting 状態であることがわかる。 過学習というのは 「acc が高い、且つ、val_acc が低い」状態である。


3章 3.3 AIに文章を生成させる

  p.129 wakachigaki関数定義の7行目
  誤:  pos = token.part_of_speech.split(',')[0]
  正: 削除

3.2 章 p.118 の下の方のコード「名詞だけを抜き出すプログラム」を少し変更してこの関数を作成した際に、いらない行を消し忘れたと思われる。


3章 3.3 AIに文章を生成させる

  p.133 下から2行目~p.134上から2行目
  誤:  if count >= 0:
  誤:    print('key:', key)
  誤:    print('value:', value)
  誤:    print('------------')
  正:  print('key:', key)
  正:  print('value:', value)
  正:  print('------------')

count >= 0 のチェックは必要ない。


Yoshihisa Nitta

http://nw.tsuda.ac.jp/