我在fashion_mnist資料集上使用給出的代碼示例。它包含metrics="accuracy"并運行通過。每當我把它改為metrics=tf.keras.metrics.Accuracy()時,就會出現以下錯誤:
ValueError: 形狀(32, 10)和(32, 1)是不兼容的。
我到底做錯了什么?是不是Accuracy()函式不一樣?
import tensorflow as tf
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
train_images = train_images / 255.。
test_images = test_images / 255.
model = tf.keras.Sequential([
tf.keras.layer.Flatten(input_shape=(28, 28)。
tf.keras.layer.Dense(128, activation=tf.keras.activations.relu)。
tf.keras.layer.Dense(10)])
model.compile(
optimizer=tf.keras.optimizers.Adam()。
loss=tf.keras.loss.SparseCategoricalCrossentropy(from_logits=True)。
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10)
uj5u.com熱心網友回復:
基于檔案這里:
當你傳遞字串
"accuracy"或"acc"時,我們將其轉換為tf.keras.metrics.BinaryAccuracy、tf.keras.metrics.Categoric中的一個。tf.keras.metrics.CategoricalAccuracy,tf.keras.metrics.SparseCategoricalAccuracy基于使用的損失函式和模型輸出形狀。
因此,當你傳遞"accuracy"時,它將被自動轉換為SparseCategoricalAccuracy()。
所以你可以像下面這樣傳遞它:
model.compile(
optimizer=tf.keras.optimizers.Adam()。
loss=tf.keras.loss.SparseCategoricalCrossentropy(from_logits=True)。
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
# or
model.compile(
optimizer=tf.keras.optimizers.Adam()。
loss=tf.keras.loss.SparseCategoricalCrossentropy(from_logits=True)。
metrics=['accuracy'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/328146.html
標籤:
