Conv2dTensorflowの結果が間違っています-精度= 0.0000e + 00

アラン・ゴ

私はテンソルフローとケラを使用して分類し、分類モデルを構築しています。以下のコードを実行すると、各エポック後に出力が収束していないように見えます。損失は着実に増加し、精度は常に0.0000e +00に設定されています。私は機械学習に不慣れで、なぜこれが起こっているのかよくわかりません。

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.models import Sequential
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
import numpy as np

import time
import tensorflow as tf

from google.colab import drive

drive.mount('/content/drive')
import pandas as pd 
data = pd.read_csv("hmnist_28_28_RGB.csv") 
X = data.iloc[:, 0:-1]
y = data.iloc[:, -1]

X = X / 255.0
X = X.values.reshape(-1,28,28,3)
print(X.shape)

model = Sequential()
model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))


model.add(Conv2D(256, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors

model.add(Dense(64))

model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.fit(X, y, batch_size=32, epochs=10, validation_split=0.3)

出力

(378, 28, 28, 3)
Epoch 1/10
9/9 [==============================] - 4s 429ms/step - loss: -34.6735 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 2/10
9/9 [==============================] - 4s 400ms/step - loss: -1074.2162 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 3/10
9/9 [==============================] - 4s 399ms/step - loss: -7446.1872 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 4/10
9/9 [==============================] - 4s 396ms/step - loss: -30012.9553 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 5/10
9/9 [==============================] - 4s 406ms/step - loss: -89006.4180 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 6/10
9/9 [==============================] - 4s 400ms/step - loss: -221087.9078 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 7/10
9/9 [==============================] - 4s 399ms/step - loss: -480032.9313 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 8/10
9/9 [==============================] - 4s 403ms/step - loss: -956052.3375 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 9/10
9/9 [==============================] - 4s 396ms/step - loss: -1733128.9000 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
Epoch 10/10
9/9 [==============================] - 4s 401ms/step - loss: -2953626.5750 - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00
kindustrii

モデルを機能させるには、モデルにいくつかの変更を加える必要があります。

データセットには7つの異なるラベルがあるため、最後のレイヤーには7つの出力ニューロンが必要です。

最後のレイヤーでは、現在sigmoidアクティベーションを使用しています。これは、マルチクラス分類には適していません。代わりに、softmaxアクティベーションを使用する必要があります

損失関数として、使用していloss='binary_crossentropy'ます。これは、二項分類にのみ使用されます。あなたの場合、あなたのラベルは整数で構成されているので、loss='sparse_categorical_crossentropy'使用されるべきです。詳細については、こちらをご覧ください

コードの最後の行に次の変更を加えます。

model.add(Dense(7))
model.add(Activation('softmax'))
model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.fit(X, y, batch_size=32, epochs=10, validation_split=0.3)

このトレーニング履歴が表示されます。

(10015, 28, 28, 3)
Epoch 1/10
220/220 [==============================] - 89s 403ms/step - loss: 1.0345 - accuracy: 0.6193 - val_loss: 1.7980 - val_accuracy: 0.4353
Epoch 2/10
220/220 [==============================] - 88s 398ms/step - loss: 0.8282 - accuracy: 0.6851 - val_loss: 3.3646 - val_accuracy: 0.0676
Epoch 3/10
220/220 [==============================] - 88s 399ms/step - loss: 0.6944 - accuracy: 0.7502 - val_loss: 2.9686 - val_accuracy: 0.1228
Epoch 4/10
220/220 [==============================] - 87s 395ms/step - loss: 0.6630 - accuracy: 0.7611 - val_loss: 3.3777 - val_accuracy: 0.0646
Epoch 5/10
220/220 [==============================] - 87s 396ms/step - loss: 0.5976 - accuracy: 0.7812 - val_loss: 2.3929 - val_accuracy: 0.2532
Epoch 6/10
220/220 [==============================] - 87s 396ms/step - loss: 0.5577 - accuracy: 0.7935 - val_loss: 2.9879 - val_accuracy: 0.2592
Epoch 7/10
220/220 [==============================] - 88s 398ms/step - loss: 0.7644 - accuracy: 0.7215 - val_loss: 2.5258 - val_accuracy: 0.2852
Epoch 8/10
220/220 [==============================] - 87s 395ms/step - loss: 0.5629 - accuracy: 0.7879 - val_loss: 2.6053 - val_accuracy: 0.3055
Epoch 9/10
220/220 [==============================] - 89s 404ms/step - loss: 0.5380 - accuracy: 0.8008 - val_loss: 2.7401 - val_accuracy: 0.1694
Epoch 10/10
220/220 [==============================] - 92s 419ms/step - loss: 0.5296 - accuracy: 0.8065 - val_loss: 3.7208 - val_accuracy: 0.0529

より良い結果を得るには、モデルを最適化する必要がありますが、一般的には機能します。

私はこのファイルをトレーニングに使用していました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Doctrine2 default timestamp wtih "0000-00-00 00:00:00" format?

分類Dev

JDBCでのDATETIME値0000-00-00 00:00:00の処理

分類Dev

PostgreSQLではNULLに "0000-00-00 00:00:00" の交換

分類Dev

0000-00-00 00:00:00を解析する方法は?

分類Dev

LSTMでの精度0

分類Dev

ASCII0x00A0はどのようにして0x00E1になりますか

分類Dev

タイムスタンプの0000-00-0000:00:00

分類Dev

systemdがスクリプト名の前に0000:00:14.0を追加して、$ 0を破損しています

分類Dev

「0000-00-00 00:00:00」をTIMESTAMPに変換できません

分類Dev

ケラと検証精度を使用したニューラルネットワークの精度が非常に低い0.0000e + 00

分類Dev

転移学習:InceptionV3での私の損失は「nan」であり、精度は「0.0000e +00」です。

分類Dev

「0000-00-00 00:00:00」はjava.sql.Timestampエラーとして表すことができません

分類Dev

( "00e0" == "00e1")がtrueと評価されるのはなぜですか?

分類Dev

日付が0000-00-0000:00:00のMySQLチェックケース?

分類Dev

Pythonで日時0000-00-0000:00:00を初期化する方法は?

分類Dev

00、0.0、0,0のjQueryテスト

分類Dev

*(volatile unsigned int *) の意味 0x00 = 0x00;

分類Dev

挿入日は「0000-00-00」を挿入しています

分類Dev

'0000-00-00T00:00:00 + 00:00'の形式の文字列でdatetime.strptimeを使用するにはどうすればよいですか?

分類Dev

「0000:00:0000:00:00」を日付に解析すると-0001-11-28T00:00:00Zが返されるのはなぜですか?

分類Dev

カフェ:精度が0のまま

分類Dev

Java getDate0000 / 00/00が奇妙な値を返す

分類Dev

Java getDate0000 / 00/00が奇妙な値を返す

分類Dev

momentjs形式は0000-00-00を返します

分類Dev

C#は精度を失い、方程式の結果を0にします

分類Dev

マシンコードで0000 00 00 00 00などはどういう意味ですか?

分類Dev

精度は0CNN PythonKerasに等しい

分類Dev

ACR38U-CCIDが常に0x6e0x00を返すのはなぜですか?

分類Dev

Mysqlの日時はmysqlバージョン5.6では0000-00-0000:00:00になります

Related 関連記事

  1. 1

    Doctrine2 default timestamp wtih "0000-00-00 00:00:00" format?

  2. 2

    JDBCでのDATETIME値0000-00-00 00:00:00の処理

  3. 3

    PostgreSQLではNULLに "0000-00-00 00:00:00" の交換

  4. 4

    0000-00-00 00:00:00を解析する方法は?

  5. 5

    LSTMでの精度0

  6. 6

    ASCII0x00A0はどのようにして0x00E1になりますか

  7. 7

    タイムスタンプの0000-00-0000:00:00

  8. 8

    systemdがスクリプト名の前に0000:00:14.0を追加して、$ 0を破損しています

  9. 9

    「0000-00-00 00:00:00」をTIMESTAMPに変換できません

  10. 10

    ケラと検証精度を使用したニューラルネットワークの精度が非常に低い0.0000e + 00

  11. 11

    転移学習:InceptionV3での私の損失は「nan」であり、精度は「0.0000e +00」です。

  12. 12

    「0000-00-00 00:00:00」はjava.sql.Timestampエラーとして表すことができません

  13. 13

    ( "00e0" == "00e1")がtrueと評価されるのはなぜですか?

  14. 14

    日付が0000-00-0000:00:00のMySQLチェックケース?

  15. 15

    Pythonで日時0000-00-0000:00:00を初期化する方法は?

  16. 16

    00、0.0、0,0のjQueryテスト

  17. 17

    *(volatile unsigned int *) の意味 0x00 = 0x00;

  18. 18

    挿入日は「0000-00-00」を挿入しています

  19. 19

    '0000-00-00T00:00:00 + 00:00'の形式の文字列でdatetime.strptimeを使用するにはどうすればよいですか?

  20. 20

    「0000:00:0000:00:00」を日付に解析すると-0001-11-28T00:00:00Zが返されるのはなぜですか?

  21. 21

    カフェ:精度が0のまま

  22. 22

    Java getDate0000 / 00/00が奇妙な値を返す

  23. 23

    Java getDate0000 / 00/00が奇妙な値を返す

  24. 24

    momentjs形式は0000-00-00を返します

  25. 25

    C#は精度を失い、方程式の結果を0にします

  26. 26

    マシンコードで0000 00 00 00 00などはどういう意味ですか?

  27. 27

    精度は0CNN PythonKerasに等しい

  28. 28

    ACR38U-CCIDが常に0x6e0x00を返すのはなぜですか?

  29. 29

    Mysqlの日時はmysqlバージョン5.6では0000-00-0000:00:00になります

ホットタグ

アーカイブ