🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

2930閲覧

keras, 分類問題に二乗誤差関数を使いたい

nomoneyninja

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/12/26 15:53

#前提
現在、Google Colab環境を利用して、
kerasで教師あり動画の分類モデルを作っています。
モデル作成そのものに関わることではありませんが、
問題を抱えています。

#実現したいこと
二乗誤差関数'mean_squared_error'と
交差エントロピー誤差関数'sparse_categorical_crossentropy'の学習を比較したいです。

理由は、分類問題の場合使用する誤差関数は交差エントロピー誤差関数が
良いと学びましたが、実際どのぐらい他の誤差関数と比較して優れているか確認したいからです。

#発生している問題
二乗誤差関数'mean_squared_error'を使用した場合、
以下のlossの動きのように、学習してないように思われます。
loss
acc
WARNING:tensorflow:No training configuration found in the save file, so the model was not compiled. Compile it manually.
Epoch 1/30
9/9 [==============================] - 1s 74ms/step - loss: 1.8656 - acc: 0.1212
Epoch 2/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6822 - acc: 0.1243
Epoch 3/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6453 - acc: 0.1221
Epoch 4/30
9/9 [==============================] - 1s 73ms/step - loss: 2.0232 - acc: 0.1651
Epoch 5/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6093 - acc: 0.1031
Epoch 6/30
9/9 [==============================] - 1s 72ms/step - loss: 1.5665 - acc: 0.1021
Epoch 7/30
9/9 [==============================] - 1s 73ms/step - loss: 1.5947 - acc: 0.0889
Epoch 8/30
9/9 [==============================] - 1s 73ms/step - loss: 1.4882 - acc: 0.0959
Epoch 9/30
9/9 [==============================] - 1s 73ms/step - loss: 1.8805 - acc: 0.1572
Epoch 10/30
9/9 [==============================] - 1s 74ms/step - loss: 1.7636 - acc: 0.1419
Epoch 11/30
9/9 [==============================] - 1s 74ms/step - loss: 2.0452 - acc: 0.1575
Epoch 12/30
9/9 [==============================] - 1s 71ms/step - loss: 1.8105 - acc: 0.1327
Epoch 13/30
9/9 [==============================] - 1s 74ms/step - loss: 1.9071 - acc: 0.1534
Epoch 14/30
9/9 [==============================] - 1s 74ms/step - loss: 1.6465 - acc: 0.1224
Epoch 15/30
9/9 [==============================] - 1s 73ms/step - loss: 1.8182 - acc: 0.1438
Epoch 16/30
9/9 [==============================] - 1s 72ms/step - loss: 1.6084 - acc: 0.1006
Epoch 17/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6627 - acc: 0.1162
Epoch 18/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6947 - acc: 0.1305
Epoch 19/30
9/9 [==============================] - 1s 72ms/step - loss: 1.6257 - acc: 0.1228
Epoch 20/30
9/9 [==============================] - 1s 73ms/step - loss: 1.7209 - acc: 0.1147
Epoch 21/30
9/9 [==============================] - 1s 73ms/step - loss: 1.5898 - acc: 0.1021
Epoch 22/30
9/9 [==============================] - 1s 72ms/step - loss: 1.8846 - acc: 0.1447
Epoch 23/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6737 - acc: 0.1247
Epoch 24/30
9/9 [==============================] - 1s 74ms/step - loss: 1.5468 - acc: 0.1165
Epoch 25/30
9/9 [==============================] - 1s 72ms/step - loss: 1.7868 - acc: 0.1244
Epoch 26/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6577 - acc: 0.1211
Epoch 27/30
9/9 [==============================] - 1s 72ms/step - loss: 1.8089 - acc: 0.1282
Epoch 28/30
9/9 [==============================] - 1s 73ms/step - loss: 1.7057 - acc: 0.1370
Epoch 29/30
9/9 [==============================] - 1s 73ms/step - loss: 1.8314 - acc: 0.1271
Epoch 30/30
9/9 [==============================] - 1s 73ms/step - loss: 1.6274 - acc: 0.1105
Complete.

コード

jupyternotebook

1loss = 'mean_squared_error' 2 3# モデル用意 4from tensorflow.keras.utils import plot_model 5from tensorflow.keras import layers, models, initializers, callbacks 6import gc 7 8model = models.load_model('/content/desk/key20201218.h5') 9 10# コンパイル 11model.compile( 12 optimizer='adam', 13 loss = loss, 14 metrics=['acc']) 15 16# 学習 17history = model.fit( 18 train_videos, train_labels, 19 batch_size=16, epochs= 30,) 20 21print("Complete.") 22 23plotLoss(history) 24plotAcc(history)

#取り組んでみたこと

  • 交差エントロピー誤差関数'sparse_categorical_crossentropy'の場合(以上のコードの誤差関数の部分のみを以下のように変更した)を見てみた → 学習しているように見える
loss = 'sparse_categorical_crossentropy'

その結果:
loss
acc

  • TensorBoardを使用して、誤差関数の実際の計算をみようとしてみた→どの部分が誤差関数の計算なのかわからない

#追記
今回質問するに当たって本当は、コードを関数にして、
もう少し直接的に比較したいと思っていました。
しかし、関数にしたものを扱おうとすると、計算資源(GPU)に関するエラーが発生してしまいます。
colab環境において学習の比較する良い方法があれば知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

#結果
二乗誤差関数'mean_squared_error'と交差エントロピー誤差関数**'categorical_crossentropy'**の学習を比較することができました。

#詳細
最適化アルゴリズムは特に学習率を変化させてみたところ、二乗誤差関数'mean_squared_error'のlossに関して双曲線形のグラフが得られました。
さらに、交差エントロピー誤差関数に関しては'sparse_categorical_crossentropy'の代わりに'categorical_crossentropy'を使用しました。

#考察
質問で挙げた二乗誤差関数'mean_squared_error'に関するlossのグラフは、誤差関数の振動を表していたのだと思います。

投稿2020/12/28 13:06

nomoneyninja

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

二乗誤差だと分類ではなく回帰になります
ラベルと特徴量(この場合は動画から抽出した何か)が回帰に向いてないのかもしれません
ラベルが近いか遠いかと、特徴量が近いか遠いかに関連が無いと、回帰はできません

たとえば、顔画像から年代を推定するのは、分類でも回帰でもできると思います
53歳の人の画像から40歳代と推定したら合ってないけど惜しいですが、10歳代と推定したらダメダメですよね
50歳代の顔画像には、10歳代よりも40歳代の方が平均的に近いだろうから、回帰でもできるでしょう

一方、mnistは回帰ではうまくいかないように思います
8画像に対して、3画像よりも7画像の方が近いとは言えないので、8正解で7推定だと惜しい、とはならないからです

投稿2020/12/27 01:29

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nomoneyninja

2020/12/28 12:54

ご回答ありがとうございます。 確かに理論的には、二乗誤差は分類でなく回帰に、交差エントロピーは回帰でなく分類に向いているのだと思います。しかしながら、今回は分類において二乗誤差と交差エントロピーと実際のそれぞれの値の比較をしたいと考えていました。拙文で申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問