在TensorFlow中,是否有一种简单的方法来获取Graph对象,并将其所有(或部分) placeholders转换为variables,以及将所有(或部分) variables和Tensors转换为constants (或placeholders)?
换句话说,我想采取一个(经过训练的)神经网络,保留它的计算图结构,但优化占位符,同时保持权重不变。
编辑
作为一个例子,给出了简单的这里神经网络
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的值。我感兴趣的是,是否有一种简单、自动的方法来执行这样的转换。(注意:我没有运行上面的示例,因此它可能包含错误)
发布于 2016-12-10 19:30:02
我认为答案是“不,没有容易的办法”。即使你的简单例子也有点复杂。您有变量的占位符,常量的变量,占位符的占位符。当占位符只转换一段时间时,一些自动方法如何知道何时转换为什么?听起来你得自己去做些什么。首先,您至少可以使用tf.trainable_variables()获得一个变量列表。x.assign()返回一个op,您可以用来为变量赋值。也许这些会在某种程度上帮助我们找到一个更自动的解决方案。
至于“我有一个类,可能的输入是什么”的一般想法,您可能需要检查概率编程。听起来很接近你的目标。对于这些,您有一堆数据/标签,并编写了一个生成标签的模型。该语言为您的模型构造了一个取样器,您可以就模型的不同部分提出问题,类似于您的问题:“我有类,输入必须是什么?”
如果您感兴趣,这里有一个介绍:https://probmods.org/。听起来https://github.com/blei-lab/edward可能也在这个区域。
https://stackoverflow.com/questions/41064419
复制相似问题