тензорный поток ошибок промежуточного уровня с предварительно обученным resnet50

#python #tensorflow #machine-learning #keras

#python #тензорный поток #машинное обучение #keras

Вопрос:

Я пытаюсь выполнить обучение передаче с помощью resnet50, но не понимаю, почему это выдает мне ошибку. Я попытался сделать то же самое с Mobilenet, и это работает.Компьютер, который я использую, не подключен к Интернету, и поэтому я загрузил веса отдельно. Это мой код

 def resnet50(image_size,num_classes,num_channels, dense_size, drop_prec, include_top, preweights):
    if preweights:
        if include_top:
            path = os.path.join('weights_pre_trianed', 'resnet50_weights_tf_dim_ordering_tf_kernels.h5')
            res = applications.ResNet50(include_top=include_top,
                                                      input_shape=(image_size[0], image_size[1], num_channels),
                                                      weights=path)
            x = res.output
            preds = Dense(num_classes, activation='softmax')(x)
            model = Model(inputs=res.input, outputs=preds)
            for layer in model.layers[:143]:
                layer.trainable = False
            for layer in model.layers[143:]:
                layer.trainable = True
            return model
 

я получаю следующую ошибку

 tensorflow.python.framework.errors_impl.InvalidArgumentError: 2 root error(s) found.
  (0) Invalid argument: Computed output size would be negative: -227 [input_size: 56, effective_filter_size: 512, stride: 2]
     [[{{node res3a_branch1/convolution}}]]
     [[Mean/_2259]]
  (1) Invalid argument: Computed output size would be negative: -227 [input_size: 56, effective_filter_size: 512, stride: 2]
     [[{{node res3a_branch1/convolution}}]]
0 successful operations.
0 derived errors ignored.
 

Я использую tensorflow 1.15 и keras 2.3.1.
Мои изображения имеют оттенки серого и размер 224×224 на 3 канала
почему я получаю эту ошибку?

EDIT1: узел res3a_branch1 — это номер слоя 45 Conv2D EDIT2: я хочу двоичную классификацию

Edit3: я попробовал, как вы предложили по ссылке, но теперь появилась другая ошибка, связанная с моделью. Я знаю, что должен использовать лямбда-слой, но я не знаю как.

     'node = layer._inbound_nodes[node_index] 
AttributeError: 'NoneType' object has no attribute '_inbound_nodes' 
 

это мой код после

  path=os.path.join('weights_pre_trianed',
'resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5')
 i = Input([None, None, 3], dtype='float32')
 x = applications.resnet50.preprocess_input(i)
 res = applications.ResNet50(include_top=include_top, weights=path)                                       
        
 x = res(x)
 x = GlobalAveragePooling2D()(x)
 preds = Dense(num_classes, activation='softmax')(x)
 model = Model(inputs=i, outputs=preds)
 for layer in model.layers[:-2]:
        layer.trainable = False
 return model
 

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

1. Пожалуйста, не используйте комментарии для добавления дополнительной информации; вместо этого отредактируйте и обновите свой вопрос. Кроме того, пожалуйста, явно укажите ваш соответствующий импорт .

2. tensorflow.org/api_docs/python/tf/keras/applications/ResNet50 упоминает, что input_shape не следует указывать, если значение include_top равно True, и, ЧТО ВАЖНО, эта строка «Примечание: каждое приложение Keras ожидает определенный вид предварительной обработки ввода. Для ResNet вызовите tf.keras.applications.resnet.preprocess_input на ваших входных данных, прежде чем передавать их в модель. »

3. @jhso Я попробовал, как вы предложили по ссылке, но теперь появилась другая ошибка, связанная с моделью. Я знаю, что должен использовать лямбда-слой, но я не знаю как. ‘узел = слой. Ошибка атрибута _inbound_nodes[node_index]: объект ‘NoneType’ не имеет атрибута ‘_inbound_nodes’ ‘

4. Может быть, обновите свой вопрос с этими деталями?