我有一个训练有素的卷积神经网络 A ,它输出给定图片包含正方形或圆形的可行性。
另一个网络 B 拍摄随机噪音图像。我的想法是拥有一堆卷积层,以便输出是一个新生成的方块。 作为错误函数,我想将生成的图像输入 A ,并从 A 的softmax张量中学习 B 的过滤器。根据我的理解,这是一种生成性的对抗性网络,除了 A 没有学习。在尝试实现这一点时,我遇到了两个问题。
我已经在 B 中导入了 A 的图层,如下所示:
with gfile.FastGFile("shape-classifier.pb", 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
image_input_layer, extern_softmax_tensor = tf.import_graph_def(
graph_def, name="", return_elements=["image_input", "Softmax"])
我想避免使用两次sess.run()三次。 (生成随机图像,从 A 获取softmax值,调整 B 的权重)。 有没有办法直接连接张量,这样我只有一张图?
通话:
logits = extern_softmax_tensor(my_generated_image_tensor)
抛出:
TypeError: 'Operation' object is not callable
“Graph-Connected”和“Feed-Connected”方法让我感到困惑。
logits = extern_softmax_tensor(my_generated_image_tensor) # however you would call it
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=label_input,
logits=logits)
cross_entropy_mean = tf.reduce_mean(cross_entropy_tensor)
optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
learning_step = optimizer.minimize(cross_entropy_mean)
使用该逻辑,错误将首先通过 A 传回。 有没有办法使用 A 计算的softmax来直接调整 B 的图层?
如果我的想法确实有效,那么实际上是否可以在tensorflow中构建它?我希望我能把问题弄清楚。
非常感谢
答案 0 :(得分:0)
是的,connect two models可以这样做。
# Generator networ
my_generated_image_tensor = ...
# Read classifier
with gfile.FastGFile("shape-classifier.pb", 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
# Map generator output to classifier input
extern_softmax_tensor, = tf.import_graph_def(
graph_def, name="", input_map={"image_input": my_generated_image_tensor},
return_elements=["Softmax:0"])
# Define loss and training step
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(
labels=label_input, logits=extern_softmax_tensor)
cross_entropy_mean = tf.reduce_mean(cross_entropy_tensor)
optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
learning_step = optimizer.minimize(cross_entropy_mean)
作为附注:1)tf.nn.softmax_cross_entropy_with_logits
期望logits作为输入,即之前的值通过softmax函数传递,所以如果Softmax
张量在加载模型是softmax操作的输出,您应该更改它以使用输入logits。 2)请注意,tf.nn.softmax_cross_entropy_with_logits
现已弃用,请参阅tf.nn.softmax_cross_entropy_with_logits_v2
。