#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. Может быть, обновите свой вопрос с этими деталями?