簡體   English   中英

Tensorflow ValueError:形狀(無,1)和(無,10)不兼容

[英]Tensorflow ValueError: Shapes (None, 1) and (None, 10) are incompatible

我正在嘗試使用 tensorflow 2.7.0 為 mnist 數據集創建一個神經網絡,代碼如下:

import tensorflow_datasets as tfds
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPooling2D, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.utils import plot_model

(train_data, test_data), ds_info = tfds.load(name='mnist', split=['train', 'test'], as_supervised=True, with_info=True)
print(len(ds_info.features['label'].names))
print(ds_info.features)


def pre_process_image(image, label, new_size=[224, 224]):
    image = tf.cast(image, tf.float64)
    label = tf.cast(label,tf.float64)
    image = tf.image.resize(image, new_size)
    return image, label


train_data = train_data.map(pre_process_image)
train_data = train_data.shuffle(buffer_size=1000)
train_data = train_data.batch(32).prefetch(tf.data.AUTOTUNE)

test_data = test_data.map(pre_process_image)
test_data = test_data.shuffle(buffer_size=1000)
test_data = test_data.batch(32).prefetch(tf.data.AUTOTUNE)

model = Sequential()
model.add(Input(shape=(224, 224, 1)))
model.add(Conv2D(filters=10, kernel_size=3, activation='relu'))
model.add(Conv2D(filters=10, kernel_size=3, activation='relu'))
model.add(MaxPooling2D())
model.add(Conv2D(filters=10, kernel_size=3, activation='relu'))
model.add(Conv2D(filters=10, kernel_size=3, activation='relu'))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(32,activation='relu'))
model.add(Dense(len(ds_info.features['label'].names), activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

plot_model(model,"./image-classifier.png",show_shapes=True)

modelCheckpoint = ModelCheckpoint('./model',monitor='val_loss',save_best_only=True)
model.fit(train_data,validation_data=test_data, epochs=6,callbacks=modelCheckpoint)

但是當我運行代碼時,我遇到了以下錯誤:

ValueError: Shapes (None, 1) and (None, 10) are incompatible

您應該將損失 function 更改為:

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

因為標簽不是 OHE

暫無
暫無

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

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