簡體   English   中英

形狀為 (32, 3) 的目標數組被傳遞給形狀為 (None, 15, 15, 3) 的 output,同時用作損失`categorical_crossentropy`

[英]A target array with shape (32, 3) was passed for an output of shape (None, 15, 15, 3) while using as loss `categorical_crossentropy`

import tensorflow as tf
from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)
training_set = train_datagen.flow_from_directory(
        'animals/training_set',
        target_size=(64, 64),
        batch_size=32,
        class_mode='categorical')

test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
        'animals/test_set',
        target_size=(64, 64),
        batch_size=32,
        class_mode='categorical')

cnn = tf.keras.models.Sequential()

cnn.add(tf.keras.layers.Conv2D(filters = 32, kernel_size = 2, activation = 'relu', input_shape = [64, 
64, 3]))

cnn.add(tf.keras.layers.MaxPool2D(pool_size = 2, strides = 2))

cnn.add(tf.keras.layers.Conv2D(filters = 32, kernel_size = 2, activation = 'relu', input_shape = [64, 
64, 3]))
cnn.add(tf.keras.layers.MaxPool2D(pool_size = 2, strides = 2))

cnn.add(tf.keras.layers.Dense(units = 128, activation = 'relu'))

cnn.add(tf.keras.layers.Dense(units = 3, activation = 'softmax'))

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

cnn.fit(x = training_set, validatian_data = test_set, epochs = 15)

彈出以下錯誤:

ValueError: 形狀為 (32, 3) 的目標數組被傳遞給形狀 (None, 15, 15, 3) 的 output,同時用作 loss categorical_crossentropy 這種損失預計目標具有與 output 相同的形狀。

您必須在最后一個 Maxpool2D 之后添加一個 tf.keras.layers.Flatten 層,以便在一維數據上使用 Dense 層。 否則,密集層適用於導致不匹配的 2D 數據。

在第二個 cnn.add(tf.keras.layers.Conv2D()) function 中,您不得傳遞輸入形狀。 輸入形狀僅傳遞給第一層。

暫無
暫無

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

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