Programim dhe zhvillim, javascript, python, php, html

ValueError: logits dhe etiketat duhet të kenë të njëjtën formë ((Asnjë, 14) vs (Asnjë, 1))

Unë jam duke krijuar një CNN që bën klasifikimin multilabel të CXR-ve me 14 klasa të ndryshme që mund të bashkëjetojnë. (https://stanfordmlgroup.github.io/competitions/chexpert/). Unë përdor Python me Keras dhe Tensorflow dhe tani po përpiqem që kodi të funksionojë (me një provë të vogël CNN) dhe marr gabimin "ValueError: logits dhe etiketat duhet të kenë të njëjtën formë ((Asnjë, 14) vs ( Asnjë, 1))" Unë kam përdorur funksionin e aktivizimit sigmoid me humbje binare të entropisë kryq. Unë mendoj se mund të ketë diçka që nuk shkon me krijimin e grupit të të dhënave të trenit dhe vërtetimit. Unë kam përdorur funksionin ImageDataGenerator.flow_from_dataframe me një kornizë të dhënash panda me një kolonë për të 14 etiketat (0 ose 1) siç tregohet në imazh. Struktura e kornizës së të dhënave të Pandas

Unë kam kërkuar për të njëjtin problem në stackoverflow/github, por ata kryesisht nuk përdorin ImageDataGenerator dhe duhet të ndryshojnë madhësinë X ose Y, por nuk e di se si duhet ta bëj këtë. A e di dikush se çfarë po shkon keq? Faleminderit paraprakisht! Kodi im është më poshtë.

import pandas as pd
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.callbacks import TensorBoard
import time
import h5py

df = pd.read_csv('D:\\Milou\\CheXpert-v1.0-small\\train.csv', usecols = [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18])
df = df.fillna(0)           # Change NaN values to 0
df = df.convert_dtypes()    # Change datatypes from float to integer if possible
df = df.replace({-1 : 0})   # Regard the uncertain labels '-1' as negative
print(df.head(5))

label_names = ["No Finding", "Enlarged Cardiomediastinum", "Cardiomegaly", "Lung Opacity", "Lung Lesion", "Edema", "Consolidation", "Pneumonia", "Atelectasis", "Pneumothorax", "Pleural Effusion", "Pleural Other", "Fracture", "Support Devices"]

datagen=ImageDataGenerator(rescale=1./255, validation_split=0.2)

train_generator=datagen.flow_from_dataframe(dataframe=df,
                                            directory="D:\\Milou",
                                            x_col="Path",
                                            y_col=label_names,
                                            subset="training",
                                            class_mode="multi_output",
                                            target_size=(100,100),
                                            batch_size=64)
validation_generator=datagen.flow_from_dataframe(dataframe=df,
                                            directory="D:\\Milou",
                                            x_col="Path",
                                            y_col=label_names,
                                            subset="validation",
                                            class_mode="multi_output",
                                            target_size=(100,100),
                                            batch_size=64)


# Creating model
NAME = "Test-{}".format(int(time.time()))

model = Sequential()

model.add(Conv2D(32, (3, 3), input_shape=(100,100,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors

model.add(Dense(256))
model.add(Activation('relu'))

model.add(Dropout(0.5))

model.add(Dense(14))
model.add(Activation('sigmoid'))

tensorboard = TensorBoard(log_dir="logs_multilabel\\{}".format(NAME))

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

step_size_train = train_generator.n//train_generator.batch_size
model.fit(train_generator,
          steps_per_epoch = step_size_train,
          epochs=3,
          validation_data= validation_generator,
          callbacks=[tensorboard])

Hera e parë që bëni një pyetje për stackoverflow, prandaj mos hezitoni të jepni komente për informacionet që mungojnë etj!


  • Duke pasur të njëjtin problem, kam provuar si 'raw' dhe 'multi_output'. Në të dyja rastet marr të njëjtin gabim ...'logits dhe labels duhet të kenë të njëjtën formë...' A gjetët një zgjidhje? 05.05.2021

Përgjigjet:


1

Meqenëse keni 2 klasa të ndryshme, duhet të keni 2 neurone në shtresën tuaj përfundimtare dense, në vend të numrit të vëzhgimeve që keni. Numri i vëzhgimeve nuk duhet të specifikohet në arkitekturën e rrjetit tuaj nervor.

10.06.2020
  • Përshëndetje, më falni, kjo ndoshta nuk ishte e qartë në pyetje, por unë dua të aplikoj klasifikimin me shumë etiketa në të 14 vëzhgimet, kështu që unë dua 14 klasa si dalje, ku dalja e rrjetit nervor do të tregojë për shembull [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0] për një imazh. 10.06.2020
  • po... por nuk është për këtë shtresa përfundimtare. nëse kaloni 14 mostra, rrjeti nervor do të nxjerrë 14 parashikime. thjesht provoni atë që thashë dhe shikoni se çfarë ndodh 10.06.2020
  • Fatkeqësisht, ai ende jep gabimin, por më pas me 2 në vend të 14: ValueError: logits dhe etiketat duhet të kenë të njëjtën formë ((Asnjë, 2) vs (Asnjë, 1)). 10.06.2020
  • oh ke te drejte. shtresa e dendur përfundimtare duhet të ketë 1 neuron me kryqentropi binare. duhet gjithashtu të funksionojë me 2 nëse funksioni juaj i humbjes është sparse_categorical_crossentropy 10.06.2020
  • Epo, gabimi tani është zgjidhur, kështu që faleminderit. Por unë marr një gabim tjetër (AttributeError: objekti 'tuple' nuk ka atribut 'formë') në rreshtin e fundit të kodit. Sidoqoftë, do të përpiqem ta rregulloj vetë këtë fillimisht. Por kjo do të thotë se nuk mund të zbuloj nëse prodhimi i CNN tani do të jetë një grup [numër binar 14x] që tregon se cilat etiketa janë parashikuar. Megjithatë, a mendoni se do të jetë kështu? 10.06.2020
  • ju jeni të mirëpritur. ky gabim ndodh në model.fit(...)? 10.06.2020
  • a nuk duhet të jetë class_mode juaj binary? 10.06.2020
  • Le të të vazhdojmë këtë diskutim në chat. 10.06.2020

  • 2

    Përdorni class_mode = 'raw' si më poshtë:

    train_generator=datagen.flow_from_dataframe(dataframe=df,
                                                directory="D:\\Milou",
                                                x_col="Path",
                                                y_col=label_names,
                                                subset="training",
                                                class_mode="raw",
                                                target_size=(100,100),
                                                batch_size=64)
    
    24.04.2021
  • Duke pasur të njëjtin problem, kam provuar si 'raw' dhe 'multi_output'. Në të dyja rastet marr të njëjtin gabim ...'logits dhe etiketat duhet të kenë të njëjtën formë...' 05.05.2021

  • 3

    ju duhet të rrafshoni rrjetin tuaj përpara shtresës përfundimtare, për shkak të këtij inputi të pabarabartë ju po merrni të gjitha këto lloj gabimesh. Në realitet në shtresën përfundimtare po kaloni një grup shumëdimensional

    tf.keras.layers.Flatten()
    
    07.07.2021
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..