在Tensorflow中,是否有一种简单的方法来取一个Graph
对象,然后将其所有(或某些)placeholder
s的全部(或某些)转换为variable
s,以及其variable
S的所有(或某些)和Tensor
s到constant
S(或placeholder
s)?
换句话说,我想采用(训练有素的)神经网络,保留其计算图结构,但要优化占位符,同时保持重量不变。
编辑
作为一个例子,从这里给定简单的神经网络:
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y, y_))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
我想将其转换为:
x = tf.Variable(tf.float32, [None, 784])
W = tf.constant([values of trained weights],shape=[784, 10])
b = tf.constant(,shape=[10])
y = tf.matmul(x, W) + b
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y, y_))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
训练原始网络后, [values of trained weights]
是W
和b
的值。我感兴趣是否存在一种简单的自动方法来执行这种转换。(注意:我还没有运行上述示例,因此可能包含错误)
我认为答案是"不,没有简单的方法"。即使您的简单例子也很复杂。您有占位符,可变的变量,恒定变量,并且占位持有人到占位持有人。某些自动方法如何知道何时只有占位符仅转换了一部分时间?听起来您必须自己实施一些东西。首先,您至少可以使用tf.trainable_variables()
获取变量列表。x.assign()
返回您可以用来将值分配给变量的OP。也许这些将有助于以某种方式朝着更自动的解决方案。
至于"我有课程,可能输入的可能性"的想法 - 您可能想检查概率编程。这听起来很接近您的目标。对于这些,您有很多数据/标签,并且编写了生成标签的模型。该语言为您的模型构造了一个采样器,您可以向您的问题提出有关模型不同部分的问题:"我有课程,输入必须是什么?"
如果您有兴趣,这是一个介绍:https://probmods.org/。听起来像https://github.com/blei-lab/edward也可能在此区域。