如何从使用tf.contrib.layers.fully_connected创建的图层中访问权重?

时间:2017-01-10 00:15:10

标签: python r tensorflow

我使用tf.contrib.layers.fully_connected在以下代码中创建图层。

library(tensorflow)

x <- tf$placeholder(tf$float32, shape(NULL, 784L))
logits <- tf$contrib$layers$fully_connected(x, 10L)
y <- tf$nn$softmax(logits)

我如何使用sess$run(W)

访问以下代码块中的权重
x <- tf$placeholder(tf$float32, shape(NULL, 784L))
W <- tf$Variable(tf$zeros(shape(784L, 10L)))
b <- tf$Variable(tf$zeros(shape(10L)))
y <- tf$nn$softmax(tf$matmul(x, W) + b)

注意:我使用TensorFlow for R,但这应该与TensorFlow for Python相同,方法是更改​​$的{​​{1}}。

2 个答案:

答案 0 :(得分:1)

您可以使用tf$global_variables()获取所有全局变量的列表。不是一个理想的解决方案(因为它检索一个未命名的变量列表),但它应该可以满足您的需求。下面的可重复示例

library(tensorflow)

datasets <- tf$contrib$learn$datasets
mnist <- datasets$mnist$read_data_sets("MNIST-data", one_hot = TRUE)

x <- tf$placeholder(tf$float32, shape(NULL, 784L))
logits <- tf$contrib$layers$fully_connected(x, 10L)

y <- tf$nn$softmax(logits)
y_ <- tf$placeholder(tf$float32, shape(NULL,10L))

cross_entropy <- tf$reduce_mean(-tf$reduce_sum(y_ * tf$log(y), reduction_indices=1L))
train_step <- tf$train$GradientDescentOptimizer(0.5)$minimize(cross_entropy)

sess <- tf$Session()
sess$run(tf$global_variables_initializer())

for (i in 1:1000) {
  batches <- mnist$train$next_batch(100L)
  batch_xs <- batches[[1]]
  batch_ys <- batches[[2]]
  sess$run(train_step,
           feed_dict = dict(x = batch_xs, y_ = batch_ys))
}

lst.variables <- sess$run(tf$global_variables())
str(lst.variables)

答案 1 :(得分:0)

您将张量的名称传递给run函数。您应该检查图形以查看从函数添加到图形中的张量的名称。