#python #machine-learning #deep-learning #tensorflow2.0 #tf.keras
Вопрос:
Я пытаюсь построить сеть, используя efficientNetB0 для классификации изображений в оттенках серого. Таким образом, мой ввод-это одноканальное изображение, и поскольку ни одна из предварительно обученных моделей не принимает одноканальное изображение в качестве входных данных, я действительно не могу передать форму ввода (256, 256, 1)
. Поэтому я попытался составить сценарий:
def build_generator(input_shape=(256,256,1)):
effB0 = tf.keras.applications.EfficientNetB0(input_shape = (256,256,3),include_top=False)
inputs = Input(shape=(256, 256, 1), name="model_input")
initializer = tf.random_normal_initializer(0., 0.02)
X = Conv2D(filters=3, kernel_size=1,
strides=1, padding='same',
kernel_initializer=initializer,
activation='relu', name='first_conv')(inputs) # (bs, 256, 256, 3)
effB0.layers[0] = effB0.layers[0](X)
model = Model(inputs = inputs, outputs = effB0.output)
return model
generator = build_generator()
но в итоге я получаю несвязанный график,
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-19-e5dd265b0536> in <module>()
----> 1 generator = build_generator()
2
3 tf.keras.utils.plot_model(
4 generator,
5 to_file = 'generator.png',
5 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py in _map_graph_network(inputs, outputs)
982 'The following previous layers '
983 'were accessed without issue: '
--> 984 str(layers_with_complete_input))
985 for x in tf.nest.flatten(node.outputs):
986 computable_tensors.add(id(x))
ValueError: Graph disconnected: cannot obtain value for tensor KerasTensor(type_spec=TensorSpec(shape=(None, 256, 256, 3),
dtype=tf.float32, name='input_12'), name='input_12',
description="created by layer 'input_12'") at layer "rescaling_9".
The following previous layers were accessed without issue: []
Есть какие-нибудь идеи? Я не хочу обрезать и редактировать промежуточный сетевой уровень, поэтому я не хочу использовать этот подход,
X = effB0(X)
model = Model(inputs = inputs, outputs = X)
Ответ №1:
Попробуйте это:
def build_generator(input_shape=(256, 256, 1)):
inputs = Input(shape=(256, 256, 1), name="model_input")
outputs = tf.keras.applications.EfficientNetB0(include_top=False, weights=None)(inputs)
model = Model(inputs, outputs)
return model
generator = build_generator()