我已经跟随TensorFlow Layers tutorial使用TensorFlow的tf.layers模块为MNIST数字分类创建CNN。现在我正在尝试学习如何使用TensorBoard: Visualizing Learning中的TensorBoard。也许本教程最近没有更新,因为它说它的示例代码是对该教程的修改和链接,但代码完全不同:它手动定义了单隐藏层完全连接的网络。 p>
TensorBoard教程展示了如何使用tf.summary通过在图层的权重张量上创建操作来将摘要附加到图层,这可以直接访问,因为我们手动定义了图层,并将tf.summary对象附加到这些操作。要做到这一点,如果我使用tf.layers及其教程代码,我相信我必须:
这是将TensorBoard与tf.layers一起使用的最佳方法,还是有一种方法可以更直接地与tf.layers和功能界面兼容?如果是这样,是否有更新的官方TensorBoard教程?如果文档和教程更加统一,那将是很好的。
答案 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.dense
(d
和D
之间的差异)。
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)
。
其他层(例如卷积层)的情况类似。使用任何可用的自动完成功能检查它们。