簡體   English   中英

tf.keras給出nan丟失和非驗證錯誤

[英]tf.keras giving nan loss and non validation error

我正在嘗試使用tf.keras API編程深度神經網絡,我覺得我的模型是正確的,我刪除了所有的nan值,但是在訓練過程中仍然得到NAN值。 我一直在使用的數據集是由UCI WISCON癌症數據集在這里

我的代碼:

from tensorflow import keras
import pandas as pd
import tensorflow as tf

df = pd.read_csv('breastc.csv.csv')
df.dropna()
id_ = df['ID'].tolist()
del df['ID']
labels = df['Class'].tolist()
import numpy as np
del df['Class']
column_list='Compactness'
df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

model = keras.Sequential()
model.add(keras.layers.Dense(64,activation='relu',input_shape = (9,)))
model.add(keras.layers.Dense(64,activation='relu'))
model.add(keras.layers.Dense(1,activation='softmax'))

model.summary()

X=df.iloc[:].values

model.compile(optimizer=tf.train.AdamOptimizer(0.01),
              loss='mse',       # mean squared error
              metrics=['mae'])
model.fit(X,labels,batch_size=32,epochs=10,validation_split=0.2)

在fit語句之后,我得到以下結果

 Train on 559 samples, validate on 140 samples Epoch 1/10 559/559 [==============================] - 0s 599us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 2/10 559/559 [==============================] - 0s 82us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 3/10 559/559 [==============================] - 0s 86us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 4/10 559/559 [==============================] - 0s 84us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 5/10 559/559 [==============================] - 0s 87us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 6/10 559/559 [==============================] - 0s 83us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 7/10 559/559 [==============================] - 0s 80us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 8/10 559/559 [==============================] - 0s 77us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 9/10 559/559 [==============================] - 0s 73us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan Epoch 10/10 559/559 [==============================] - 0s 62us/step - loss: nan - mean_absolute_error: nan - val_loss: nan - val_mean_absolute_error: nan <tensorflow.python.keras._impl.keras.callbacks.History at 0x15c94a80cc0> 

如我們所見,沒有培訓在進行。 請指導我。

您誠摯的,Vidit Shah

當您遇到2個或更多類的分類問題並且只想選擇其中一個時,通常應將最后一層的輸出神經元數與類數相等,並將其激活函數設置為softmax(因此,將在所有類別上作為輸出分布)。 一旦獲得輸出分布,就可以將接收概率最高的輸出向量(即類)中的索引視為預測。

您應該更改的另一件事是損失函數,當您使用softmax作為輸出激活函數時,您需要使用交叉熵損失來測量兩個分布之間的距離(在這種情況下,網絡的輸出和黃金分布-全為0,對應正確類別的索引處為1)。 如果您將黃金標簽表示為正確類別的索引(在您的情況下為0或1),則可以通過將sparse_corssentropy設置為損失函數來直接使用這些索引(它將自動將索引轉換為一熱向量)。

要包裝所有內容,可以按以下方式轉換代碼:

from tensorflow import keras
import pandas as pd
import tensorflow as tf

df = pd.read_csv('breastc.csv.csv')
df.dropna()
id_ = df['ID'].tolist()
del df['ID']
labels = df['Class'].tolist()
import numpy as np
del df['Class']
column_list='Compactness'
df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

model = keras.Sequential()
model.add(keras.layers.Dense(64,activation='relu',input_shape = (9,)))
model.add(keras.layers.Dense(64,activation='relu'))
model.add(keras.layers.Dense(2,activation='softmax'))

model.summary()

X=df.iloc[:].values

model.compile(optimizer=tf.train.AdamOptimizer(0.01),
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(X,labels,batch_size=32,epochs=10,validation_split=0.2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM