首页 文章

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

提问于
浏览
0

TensorFlow中,是否有一种简单的方法来获取Graph对象,并将其placeholder的所有(或部分)转换为variable,将其所有(或某些)variableTensor转换为constant(或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

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

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

    这里's an intro if you'很感兴趣:https://probmods.org/ . 听起来像https://github.com/blei-lab/edward也可能在这个领域 .

相关问题