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!
sparse_categorical_crossentropy
10.06.2020model.fit(...)
? 10.06.2020class_mode
juajbinary
? 10.06.2020