Я пытаюсь построить такую модель в TensorFlow.
Модель имеет «функцию» внутри функции потерь (как A) или перед ней (как B), которая должна создавать изображение с использованием оценки некоторых параметров CNN (слои CNN + Dens).
Представьте, что входные изображения представляют собой прямоугольники с разными размерами и координатами. Нейронная сеть предполагает извлечь эти параметры (вес, рост, X и Y прямоугольника). Используя эти оценочные параметры, «функция» воссоздает прямоугольник и отправляет его в функцию «Расстояние» (A) / «Потеря» (B), чтобы выходные данные можно было использовать для обновления весов в нейронной сети.
Я сделал каждую часть сети, но когда я пытаюсь получить параметры, оцененные CNN для каждого изображения, чтобы получить изображение и отправить его в функцию потери / расстояния, я не могу получить доступ к реальным числовым данным. вместо этого выход CNN - Tensor
. Я попытался набрать output
, используя новый tf.Session
, но это происходит:
FailedPreconditionError: Attempting to use uninitialized value conv2d/kernel
[[Node: conv2d/kernel/read = Identity[T=DT_FLOAT, _class=["loc:@conv2d/kernel"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](conv2d/kernel)]]
[[Node: dense_2/BiasAdd/_11 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_80_dense_2/BiasAdd", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Как мне построить подобную модель в TensorFlow?
Мой пример кода выглядит так:
CNN:
def cnn_model_fn(features, labels, mode):
input_layer = tf.reshape(features["x"], [-1, 96,96,1])
conv1 = tf.layers.conv2d(inputs=input_layer,...)
other convs....
output = tf.layers.dense(inputs=lastlayer, units=4)
predictions = {"params": output}
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode,predictions=predictions)
# Calculate Loss - here the output will go to "A Function"
loss = distance_function(features["x"],AFunction(output))
# Configure the Training Op (for TRAIN mode)
if mode == tf.estimator.ModeKeys.TRAIN:
optimizer = ....
# Add evaluation metrics (for EVAL mode)
eval_metric_ops = {...}
return tf.estimator.EstimatorSpec(...)
и «Функция» имеет вид:
def AFunction(y_pred):
_sess = tf.Session()
y_pred = _sess.run(y_pred)
_sess.close()
return rectangle(y_pred)
также я попробовал это, и та же самая ошибка происходит:
def AFunction(y_pred):
_sess = tf.Session()
with _sess.as_default():
y_pred = y_pred.eval()
return rectangle(y_pred)
Функция расстояния является одной из функций tf.losses (необходимо проверить, какая из них работает лучше всего)
Спасибо.