InvalidArgumentError: Neslučitelné tvary: [29] vs. [29,7,7,2]

0

Otázka

takže, jsem nový tady a v Pythonu také. Snažím se, aby můj vlastní sítě. Našel jsem nějaké fotky, dokumenty a kočky 15x15 a bohužel nemohl této základní sítě...

Takže, to jsou knihovny, které jsem pomocí

    from tensorflow.keras.models import Sequential
    from tensorflow.keras import utils
    from tensorflow.keras.datasets import mnist  
    from tensorflow.keras.layers import Dense
    import numpy as np
    import matplotlib.pyplot as plt
    import tensorflow as tf
    import keras
    from tensorflow.keras.layers import Conv2D
    from tensorflow.keras.layers import MaxPooling2D
    from tensorflow.keras.layers import GlobalMaxPooling2D

Tělo

train_dataset = tf.keras.preprocessing.image_dataset_from_directory(
        'drive/MyDrive/cats vs dogs/cats vs dogs/training',
        color_mode="rgb",
        batch_size=32,
        image_size=(150, 150),
        shuffle=True,
        seed=42,
        validation_split=0.1,
        subset='training',
        interpolation="bilinear",
        follow_links=False,
        )

validation_dataset = tf.keras.preprocessing.image_dataset_from_directory(
    'drive/MyDrive/cats vs dogs/cats vs dogs/training',
    color_mode="rgb",
    batch_size=32,
    image_size=(150, 150),
    shuffle=True,
    seed=42,
    validation_split=0.1,
    subset='validation',
    interpolation="bilinear",
    follow_links=False,
    )
test_dataset = tf.keras.preprocessing.image_dataset_from_directory(
    'drive/MyDrive/cats vs dogs/cats vs dogs/test',
     batch_size = 32,
     image_size = (150, 150),
     interpolation="bilinear"
     )

model = Sequential()
model.add(keras.Input(shape=(150, 150, 3)))
model.add(Conv2D(32, 5, strides=2, activation="relu"))
model.add(Conv2D(32, 3, activation="relu"))
model.add(MaxPooling2D(3))
model.add(Dense(250, activation='sigmoid'))
model.add(Dense(100))
model.add(MaxPooling2D(3))
model.add(Dense(2))
model.summary()

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

history = model.fit(train_dataset, validation_data=validation_dataset, epochs=5, verbose=2)

A já se tuto chybu

Incompatible shapes: [29] vs. [29,7,7,2]
 [[node gradient_tape/binary_crossentropy/mul_1/BroadcastGradientArgs
 (defined at /usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:464)
 ]] [Op:__inference_train_function_4364]

 Errors may have originated from an input operation.
 Input Source operations connected to node 
 gradient_tape/binary_crossentropy/mul_1/BroadcastGradientArgs:
 In[0] gradient_tape/binary_crossentropy/mul_1/Shape:   
 In[1] gradient_tape/binary_crossentropy/mul_1/Shape_1

Snažil jsem se změnit z binary_crossentropy k categorical_crossentrapy ale nepomohlo to, asi moje chyba je v datových souborech nebo vstupy, ale nevím, jak to vyřešit :(

Opravdu doufám, že najít pomoc tady.

[architektura][1] [1]: https://i.stack.imgur.com/w4Y9N.png

1

Nejlepší odpověď

1

Potřebujete sloučit vaše predikce někde, jinak jsou outputing obrázek (29 vzorků o velikosti 7x7 s 2 kanály), zatímco vy prostě chci byt 2 dimenzionální logits (takže tvar 29x2). Architektura, kterou používáte, je poněkud divné, to jste si zploštění provozu před prvním Hustou vrstvu, a pak ne "maxpooling2d" (jako to dělá žádný smysl pro vyrovnaný signál)? Míchání relu a esovité aktivace je také velmi nestandardní, doporučoval bych vám začít s prokázanou architektury, spíše než se snažit vytvořit vlastní získat nějaké intuice.

model = Sequential()
model.add(keras.Input(shape=(150, 150, 3)))
model.add(Conv2D(32, 5, strides=2, activation="relu"))
model.add(Conv2D(32, 3, activation="relu"))
model.add(MaxPooling2D(3))
model.add(Flatten())
model.add(Dense(250, activation="relu"))
model.add(Dense(100, activation="relu"))
model.add(Dense(2))
model.summary()
2021-11-21 22:27:40

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................