ffnn = Sequential([
Flatten(input_shape=X_train.shape[1:] )。
Dense(512, activation='relu') 。
Dropout(0.2)。
Dense(512, activation='relu') 。
Dropout(0.2)。
Dense(10, activation='softmax')
])
ffnn_history = ffnn.fit(X_train,
y_train,
batch_size=batch_size。
epochs=epochs,
validation_split=0.2。
callbacks=[checkpointer, early_stopping]。
verbose=1。
shuffle=True)
ffnn_accuracy = ffnn.evaluation(X_test, y_test, verbose=0) [1]
我理解這個網路和softmax函式的作業原理。我的問題是,輸出層有10個節點。輸出應該是一個長度為10的向量(向量之和為1)。在訓練和評估程序中,它是如何匹配標簽y的,其中y是一個整數(它不是應該先將輸出向量轉化為相應的整數嗎)?
Tensorflow是自動將長度為10的輸出向量解釋為相應的整數還是什么?
uj5u.com熱心網友回復:
在你的例子中,標簽是由損失函式sparse_categorical_crossentropy()進行單熱編碼的:
>>> y_true = [1, 2]
>>> y_pred = [[0.05, 0。 95, 0], [0.1, 0.8, 0.1] ]
>>> tf.keras.loss.sparse_categorical_crossentropy(y_true, y_pred).numpy()
array([0.05129344, 2.3025851] , dtype=float32)
輸出softmax(x)可以被解釋為一個概率分布(Σ softmax(x) = 1.0)。因此,例如,argmax(softmax(x)) = id_maxprob將回傳你最有可能的類別的索引。
因此,你的神經網路的目標向量將是10維的,這樣每個整數[0, 1, ..., 8, 9]對應于 softmax-output 的一個節點。
既然如此,你要預測的目標向量就會被簡單地進行單熱編碼:
[1, 0, 0, 0, 0, 0, 0, 0, 0] # ==0]。
[0, 1, 0, 0, 0, 0, 0, 0, 0] # ==1]。
..
[0, 0, 0, 0, 0, 0, 0, 1] # ==9
換句話說。如果你有一批影像并將其送入你的網路,輸出將是(n, num_classes)(這里num_classes是10),并且由你對輸出進行最終解釋,例如使用np.argmax以獲得最終預測。
predictions = model(images)
predicted_ids = np.argmax(predictions, axis=1)
# Print each index == predicted integer[/span]。
print(predicted_ids)
另外,注意下面的例子:
>>> tf. one_hot([1, 2, 9], depth=10)
<tf.Tensor: shape=(3, 10), dtype=float32, numpy=
array([[0./span>, 1./span>, 0./span>, 0./span>, 0. , 0., 0., 0., 0.]。
[0., 0., 1., 0., 0. , 0., 0., 0., 0.]。
[0., 0., 0., 0., 0. , 0., 0., 0., 1.]] , dtype=float32)>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332764.html
標籤:
上一篇:每當有新的檔案被添加到檔案夾中時,XSLX轉換為CSV檔案
下一篇:在SQL中基于另一列獲取最大日期
