[英]Tensorflow Keras cross entropy loss with linear activation on output
在 PyTorch 中,交叉熵損失 function 類似於
CrossEntropyLoss(x, y) = H(one_hot(y), softmax(x))
所以你可以有一個線性 output 層。 有沒有辦法用 tf.keras.Sequential 做到這一點?
我為 MNIST 寫了這個小 CNN
model = tf.keras.Sequential()
model.add(tfkl.Input(shape=(28, 28, 1)))
model.add(tfkl.Conv2D(32, (5, 5), padding="valid", activation=tf.nn.relu))
model.add(tfkl.MaxPool2D((2, 2)))
model.add(tfkl.Conv2D(64, (5, 5), padding="valid", activation=tf.nn.relu))
model.add(tfkl.MaxPool2D((2, 2)))
model.add(tfkl.Flatten())
model.add(tfkl.Dense(1024, activation=tf.nn.relu))
model.add(tfkl.Dense(10, activation=tf.nn.softmax))
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
model.summary()
model.fit(x_train, y_train, epochs=1)
我想擁有
model.add(tfkl.Dense(10))
作為最后一層。
我正在嘗試實現 ADef 算法,但梯度 wrt 的條目。 輸入似乎太小了,我猜用線性 output 他們會是對的。
我知道有 tf.nn.softmax_cross_entropy_with_logits 但我不知道如何在這種情況下使用它。
編輯:
改變
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
至
model.compile(optimizer="adam",
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=["accuracy"])
成功了。
謝謝@Moe1234。 為了社區的利益,在這里提供解決方案
更改后問題已解決
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
至
model.compile(optimizer="adam",
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=["accuracy"])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.