TensorFlow:如何交换图形输入和权重的滚动?



在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]Wb的值。我感兴趣是否存在一种简单的自动方法来执行这种转换。(注意:我还没有运行上述示例,因此可能包含错误)

我认为答案是"不,没有简单的方法"。即使您的简单例子也很复杂。您有占位符,可变的变量,恒定变量,并且占位持有人到占位持有人。某些自动方法如何知道何时只有占位符仅转换了一部分时间?听起来您必须自己实施一些东西。首先,您至少可以使用tf.trainable_variables()获取变量列表。x.assign()返回您可以用来将值分配给变量的OP。也许这些将有助于以某种方式朝着更自动的解决方案。

至于"我有课程,可能输入的可能性"的想法 - 您可能想检查概率编程。这听起来很接近您的目标。对于这些,您有很多数据/标签,并且编写了生成标签的模型。该语言为您的模型构造了一个采样器,您可以向您的问题提出有关模型不同部分的问题:"我有课程,输入必须是什么?"

如果您有兴趣,这是一个介绍:https://probmods.org/。听起来像https://github.com/blei-lab/edward也可能在此区域。

最新更新