Обучение передаче с ошибкой подгонки модели VGG16

#keras #conv-neural-network #transfer-learning #vgg-net #image-classification

Вопрос:

Я новичок в передаче обучения и не могу понять, что вызывает следующую ошибку: ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int) при запуске model.fit . Что может привести к этой проблеме?

 #created dataframes for training, validation, and testing  #Example of what dataframe looks like:  dataframe.head(1)   Sex Weight File  0 female 124 1_124_3_20161220221743058.jpg   
 weight_label = df.columns[1]  sex_label = df.columns[0]  labels = [classlabel for classlabel in df.columns[:2]]   train_datagen = ImageDataGenerator(  rescale=1./255,  rotation_range = 40,  width_shift_range = 0.4,  height_shift_range = 0.4  )   test_datagen = ImageDataGenerator(rescale=1./255)   subfolder = "./training/"  #Dataframe is simply partitioned as you would splitting by dataset  training_dataframe, validation_dataframe, testing_dataframe   train_generator=train_datagen.flow_from_dataframe(  dataframe=training_dataframe,  directory=directory_dataset_path,  x_col="file",  y_col=labels,  batch_size=32,  seed=42,  shuffle=True,  class_mode="raw"  )   valid_generator=test_datagen.flow_from_dataframe(  dataframe=validation_dataframe,  directory=directory_dataset_path,  x_col="file",  y_col=labels,  batch_size=32,  seed=42,  shuffle=True,  class_mode="raw"  )   
 Base_VGG16 = VGG16(weights = 'imagenet',include_top = False)   for layer in Base_VGG16[:12]:  layer.trainable = False   sex_model = Base_VGG16.output  sex_model = GlobalAveragePooling2D()(sex_model)  sex_model = Dropout(0.5)(sex_model)  predict_sex = Dense(2, activation='sigmoid')(sex_model)   weight_model = Base_VGG16.output  weight_model = GlobalAveragePooling2D()(weight_model)  weight_model = Dropout(0.5)(weight_model)  predict_weight = Dense(1, activation='relu')(weight_model)  model = Model(inputs=Base_VGG16.input, outputs=[predict_sex, predict_weight])   model.compile(loss =['binary_crossentropy','mae'],  optimizer=SGD(lr=1e-4, momentum=0.9),  metrics=['accuracy','mae'])   history=model.fit(  train_generator,  steps_per_epoch=5000 // 32,  epochs=10,  validation_data=valid_generator,  validation_steps=1500 // 32  )  

Комментарии:

1. Я думаю, вам нужно опубликовать больше кода, определения train_generator и valid_generator , похоже, отсутствуют в данном фрагменте.

2. Спасибо за предложение. Я добавил код для обоих.

Ответ №1:

Типы данных вашего объекта dataframe могут быть не в правильном формате. Используйте training_dataframe.info() , чтобы узнать типы dtypes. Также проверьте, есть ли какие-либо значения NaN в вашем фрейме данных или нет

 training_dataframe['Weight'] = training_dataframe['Weight'].astype(int)  

Также попробуйте использовать кодеры для кодирования категориальных функций

Комментарии:

1. Спасибо. Это очень полезно. Типы: dtypes: int64(1), object(2) итак, мне нужно преобразовать два типа объектов в int64 правильно?

2. Да, неправильные типы dtypes могут вызвать проблемы такого типа.

3. Просто для подтверждения, правильно ли я понимаю, что запуск model.fit на a dtypes: object приведет к ошибке? Объекты не могут быть обработаны и должны быть сначала преобразованы?

4. Да, модели ML не понимают категориальные данные. Так что это должно быть закодировано.