簡體   English   中英

使用Keras Python的神經網絡模型

[英]Neural Network model with keras python

我對我的NN模型有疑問。 我正在從python使用keras。 我的培訓包括1000個樣本,每個樣本具有4320個功能。 有10個類別,而我的Y包含由10個元素組成的numpy數組,除一個位置外,所有其他位置的位置均為0。

但是,我的NN並沒有從第一個紀元學習,並且我的模型可能錯了,這是我第一次構建NN模型的嘗試,而且我肯定錯了幾件事。

Epoch 1/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7110 - acc: 0.5796
Epoch 2/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 3/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 5/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 6/150
1000/1000 [==============================] - 38s 38ms/step - loss: 6.7063 - acc: 0.5800
Epoch 7/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800
Epoch 8/150
1000/1000 [==============================] - 39s 39ms/step - loss: 6.7063 - acc: 0.5800
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 6.7063 - acc: 0.5800

這是我的NN代碼的一部分:

model = Sequential()
model.add(Dense(4320, input_dim=4320, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(10, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=10)

因此,我的X是一個長度為1000的numpy數組,其中包含4320個元素的其他numpy數組。 我的Y是一個長度為1000的numpy數組,其中包含10個元素(類別)的其他numpy數組。

我是在做錯什么,還是在此培訓基礎上無法學習? (在曼哈頓距離的1NN上,我在此訓練集上獲得了約80%的准確性)

LE:將數據標准化后,這是前10個時期的輸出:

Epoch 1/150
1000/1000 [==============================] - 41s 41ms/step - loss: 7.9834 - acc: 0.4360
Epoch 2/150
1000/1000 [==============================] - 41s 41ms/step - loss: 7.2943 - acc: 0.5080
Epoch 3/150
1000/1000 [==============================] - 39s 39ms/step - loss: 9.0326 - acc: 0.4070
Epoch 4/150
1000/1000 [==============================] - 39s 39ms/step - loss: 8.7106 - acc: 0.4320
Epoch 5/150
1000/1000 [==============================] - 40s 40ms/step - loss: 7.7547 - acc: 0.4900
Epoch 6/150
1000/1000 [==============================] - 44s 44ms/step - loss: 7.2591 - acc: 0.5270
Epoch 7/150
1000/1000 [==============================] - 42s 42ms/step - loss: 8.5002 - acc: 0.4560
Epoch 8/150
1000/1000 [==============================] - 41s 41ms/step - loss: 9.9525 - acc: 0.3720
Epoch 9/150
1000/1000 [==============================] - 40s 40ms/step - loss: 9.7160 - acc: 0.3920
Epoch 10/150
1000/1000 [==============================] - 39s 39ms/step - loss: 9.3523 - acc: 0.4140

看起來好像開始波動,所以看起來不錯

看來您的類別,類是互斥的,因為您的目標數組是一鍵編碼的(即,您不必同時預測2個類)。 在這種情況下,您應該在最后一層使用softmax來生成分布並使用categorical_crossentropy訓練。 如果事實上,您可以將目標設置為Y = [2,4,0,1]作為類別索引,並使用sparse_categorical_crossentropy進行訓練,這將節省創建2個形狀數組的時間(樣本,10個)。

似乎您具有許多功能,很可能網絡的性能將取決於您如何預處理數據。 對於連續輸入,將其歸一化是明智的;對於離散輸入,將其編碼為“一鍵通”有助於學習。

暫無
暫無

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

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