如何在tf.layers模块

时间:2018-03-09 20:42:04

标签: tensorflow deep-learning tensorboard tensorflow-layers

我已经跟随TensorFlow Layers tutorial使用TensorFlow的tf.layers模块为MNIST数字分类创建CNN。现在我正在尝试学习如何使用TensorBoard: Visualizing Learning中的TensorBoard。也许本教程最近没有更新,因为它说它的示例代码是对该教程的修改和链接,但代码完全不同:它手动定义了单隐藏层完全连接的网络。 p>

TensorBoard教程展示了如何使用tf.summary通过在图层的权重张量上创建操作来将摘要附加到图层,这可以直接访问,因为我们手动定义了图层,并将tf.summary对象附加到这些操作。要做到这一点,如果我使用tf.layers及其教程代码,我相信我必须:

  1. 修改图层教程的示例代码以使用非功能性界面(Conv2D代替conv2d和Dense而不是密集)来创建图层
  2. 使用图层对象的trainable_weights()函数获取权重张量并将tf.summary对象附加到那些
  3. 这是将TensorBoard与tf.layers一起使用的最佳方法,还是有一种方法可以更直接地与tf.layers和功能界面兼容?如果是这样,是否有更新的官方TensorBoard教程?如果文档和教程更加统一,那将是很好的。

3 个答案:

答案 0 :(得分:2)

您应该能够使用tf.layers调用的输出来获取激活。采用链接层教程的第一个卷积层:

int main() {
string fileName; 
ifstream inFile; 
cout << "Please enter a filename: ";
getline(cin,fileName);
inFile.open(fileName);
if(!inFile) 
{
    cerr << "Could not open: " << fileName << endl;
    return 1;
}
cout << endl; 
record rec;
inFile.read(reinterpret_cast<char *>(&rec),sizeof(rec));
while(!inFile.eof())
  {
    cout << "Id  : " << rec.id << endl;
    cout << "Name: " << rec.name << endl;
    cout << "Addr: " << rec.address << "\n" << endl;
    inFile.read(reinterpret_cast<char *>(&rec),sizeof(rec));
  }
  inFile.close(); 
  return 0;
}

你可以这样做:

# Convolutional Layer #1
conv1 = tf.layers.conv2d(
    inputs=input_layer,
    filters=32,
    kernel_size=[5, 5],
    padding="same",
    activation=tf.nn.relu)

不确定这是否是最好的方法,但我相信这是做你想做的最直接的方式。

希望这有帮助!

答案 1 :(得分:1)

你可以使用这样的东西

with tf.name_scope('dense2'):

    preds = tf.layers.dense(inputs=dense1,units = 12,  
                    activation=tf.nn.sigmoid, name="dense2")

    d2_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'dense2')

    tf.summary.histogram("weights", d2_vars[0])
    tf.summary.histogram("biases", d2_vars[1])
    tf.summary.histogram("activations", preds)

答案 2 :(得分:0)

另一种选择是使用tf.layers.Dense代替tf.layers.densedD之间的差异)。

Dense的范例是:

x = tf.placeholder(shape=[None, 100])
dlayer = tf.layers.Dense(hidden_unit)
y = dlayer(x)

dlayer作为中间人,您可以执行以下操作:

k = dlayer.kernel
b = dlayer.bias
k_and_b = dlayer.weights

请注意,在申请dlayer.kernel之前,您无法获得y = dlayer(x)

其他层(例如卷积层)的情况类似。使用任何可用的自动完成功能检查它们。