#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
на adtypes: object
приведет к ошибке? Объекты не могут быть обработаны и должны быть сначала преобразованы?4. Да, модели ML не понимают категориальные данные. Так что это должно быть закодировано.