моя проблема в том, что у меня есть FCN с несколькими входами размера изображения (но вход ограничен квадратом изображений с формой (2 ^ n, 2 ^ n)) .
def down_block(x, filters, kernel_size=(3, 3), padding="same", strides=1):
c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(x)
c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(c)
p = keras.layers.MaxPool2D((2, 2), (2, 2))(c)
return c, p
def up_block(x, skip, filters, kernel_size=(3, 3), padding="same", strides=1):
us = keras.layers.UpSampling2D((2, 2))(x)
concat = keras.layers.Concatenate()([us, skip])
c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(concat)
c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(c)
return c
def bottleneck(x, filters, kernel_size=(3, 3), padding="same", strides=1):
c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(x)
c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(c)
return c
def UNet():
f = [16, 32, 64, 128, 256]
inputs = keras.layers.Input((None,None, 3))
p0 = inputs
c1, p1 = down_block(p0, f[0]) #128 -> 64
c2, p2 = down_block(p1, f[1]) #64 -> 32
c3, p3 = down_block(p2, f[2]) #32 -> 16
c4, p4 = down_block(p3, f[3]) #16->8
bn = bottleneck(p4, f[4])
u1 = up_block(bn, c4, f[3]) #8 -> 16
u2 = up_block(u1, c3, f[2]) #16 -> 32
u3 = up_block(u2, c2, f[1]) #32 -> 64
u4 = up_block(u3, c1, f[0]) #64 -> 128
outputs = keras.layers.Conv2D(1, (1, 1), padding="same", activation="sigmoid")(u4)
model = keras.models.Model(inputs, outputs)
return model
Компиляция, обучение и вывод с помощью keras в tf.version 1.15 просто отлично работает, если я не пытаюсь преобразовать модель hdf5 в граф вывода с помощью:
Если я пытаюсь загрузить файл hdf5 и сохраните его как файл savemodel:
from keras import backend as K
# This line must be executed before loading Keras model.
K.set_learning_phase(0)
from keras.models import load_model
model = model
print(model.outputs)
# [<tf.Tensor 'dense_2/Softmax:0' shape=(?, 10) dtype=float32>]
print(model.inputs)
, чем я получаю без ошибок, но информация:
[<tf.Tensor 'conv2d_246/Sigmoid:0' shape=(?, ?, ?, 1) dtype=float32>]
[<tf.Tensor 'input_13:0' shape=(?, ?, ?, 3) dtype=float32>]
, если я попытаюсь использовать эту модель сохранения для использования TensorflowRT:
import tensorflow.contrib.tensorrt as trt
trt.create_inference_graph(
input_saved_model_dir = "/content/path to savedmodel",
output_saved_model_dir = "/content/path to new model")
Чем я получаю сообщение об ошибке:
TypeError: create_inference_graph() missing 2 required positional arguments: 'input_graph_def' and 'outputs'
Спасибо за вашу помощь, ребята