根据模型预测,使用丢失的自定义函数的返回值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据模型预测,使用丢失的自定义函数的返回值相关的知识,希望对你有一定的参考价值。
我正在尝试在TensorFlow中构建这样的模型。 该模型在损失函数内(作为A)或在其之前(作为B)具有“函数”,其应当使用CNN(CNN +密度层)估计某些参数来制作图像。 想象一下输入图像是一些具有不同大小和协调的矩形。神经网络假设提取这些参数(矩形的重量,高度,X和Y)。使用这些估计参数“A function”将重新创建矩形并将其发送到“Distance”(A)/“Loss”(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函数之一(应该测试哪个函数最好) 谢谢。
我想你需要在这里添加完整的代码。为了更好的答案。从错误中看,您似乎需要在开始执行(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*/
以上是关于根据模型预测,使用丢失的自定义函数的返回值的主要内容,如果未能解决你的问题,请参考以下文章