TensorFlow:如何交换图表的输入和权重?

时间:2016-12-09 16:05:53

标签: tensorflow

TensorFlow中,有一种简单的方法可以获取Graph个对象,并将其placeholder的所有(或部分)转换为variable,并且(或部分)variableTensorconstant s(或placeholder s)?

换句话说,我想采用(训练的)神经网络,保留其计算图结构,但要优化占位符,同时保持权重不变。

修改

作为一个例子,鉴于来自here的简单神经网络:

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的值。我感兴趣是否存在一种简单的自动方式来执行这种转换。 (注意:我没有运行上面的例子,所以它可能包含错误)

1 个答案:

答案 0 :(得分:0)

我认为答案是"不,没有一个简单的方法"。即使你的简单例子也有点复杂。你有占位符变量,变量变量常量,占位符占位符。一些自动方法如何知道何时转换为只有部分时间转换占位符的内容?听起来你必须自己实现一些东西。首先,您至少可以使用tf.trainable_variables()获取变量列表。 x.assign()返回一个可用于为变量赋值的操作。也许那些会以某种方式帮助实现更自动化的解决方案。

关于"一般的想法,我有一个课程,可能的输入是什么" - 您可能想要查看概率编程。这听起来非常接近你的目标。对于那些,你有一堆数据/标签,你编写一个生成标签的模型。该语言为您的模型构建了一个采样器,您可以询问有关模型的不同部分的问题,类似于您的问题:"我有类,输入必须是什么?"

如果您有兴趣,请参阅以下内容:https://probmods.org/。听起来像https://github.com/blei-lab/edward也可能在这个区域。