Tensorflow Keras交叉熵损失与输出上的线性激活



PyTorch中的交叉熵损失函数类似

交叉熵损失(x,y(=H(one_hot(y(,softmax(x((

这样您就可以拥有一个线性输出层。有没有办法用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的条目。输入似乎太小,我想如果是线性输出,它们是正确的
我知道有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"])

最新更新