我正试图在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(...)
和“A function”就像:
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函数之一(应该测试哪个函数效果最好)
感谢。
答案 0 :(得分:0)
我认为您需要在此处添加完整代码。为了更好的答案。 从错误中看,您似乎需要在开始执行(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*/