根据模型预测,使用丢失的自定义函数的返回值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据模型预测,使用丢失的自定义函数的返回值相关的知识,希望对你有一定的参考价值。

我正在尝试在TensorFlow中构建这样的模型。 该模型在损失函数内(作为A)或在其之前(作为B)具有“函数”,其应当使用CNN(CNN +密度层)估计某些参数来制作图像。 想象一下输入图像是一些具有不同大小和协调的矩形。神经网络假设提取这些参数(矩形的重量,高度,X和Y)。使用这些估计参数“A function”将重新创建矩形并将其发送到“Distance”(A)/“Loss”(B)函数,以便输出可用于更新神经网络中的权重。

Model diagram

我确实做了网络的每个部分但是当我试图获得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函数之一(应该测试哪个函数最好) 谢谢。

答案

我想你需要在这里添加完整的代码。为了更好的答案。从错误中看,您似乎需要在开始执行(Training)之前添加tf.global_variables_initializer(),因为某些变量未初始化。此外,您似乎想要基于A_Function和图像创建新的损失函数。

def A_Function(inp):
    return np.pow(inp,2)/*Do something with input*/

在CNN代码写这个loss = distance_function(features["x"],AFunction(output))现在训练使用

with tf.Session as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(cost, feed_dict) /* Just usual training stuff*/

以上是关于根据模型预测,使用丢失的自定义函数的返回值的主要内容,如果未能解决你的问题,请参考以下文章

Access 中的自定义函数返回类型转换错误

Tabnet 分类器预测返回 0 和 1 值

在 R 中编写自定义分类器并预测函数

当行丢失时,用 Oracle SQL PIVOT 结果中的自定义值替换 NULL

Keras 中基于输入数据的自定义损失函数

如何在 Shader 图形的自定义函数中使用 TEXCOORD0?