tensorflow如何查看模型的所有层的输入输出的tensor name

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow如何查看模型的所有层的输入输出的tensor name相关的知识,希望对你有一定的参考价值。

# 在谷歌提出的Inception-v3模型中,这个张量名称就是'pool_3/_reshape:0'。是怎么查看的就是pool_3/_reshape:0呢
# 在训练模型时,可以通过tensor.name来获取张量的名称。
BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0'

参考技术A 减轻机体重量、坚固并改良尾翼、坚固螺旋桨、加强橡筋动力。
1、放飞时,应该找一些比较宽阔的地方放飞,以避免飞机飞出一定的范围。
2、起飞时,一定要对准风向,逆风放飞,这样飞机会碰到逆风的气流,而往上爬行。
3、投飞时,要往向上斜5至10度角,才能使飞机飞得比较高。因为往斜向上的角度投,飞机比较容易遇到逆风的气流,能迅速向上爬行。
参考技术B from tensorflow.python import pywrap_tensorflow
import os

model_dir = 'your model directory'
checkpoint_path = os.path.join(model_dir, "model.ckpt")
reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)
var_to_shape_map = reader.get_variable_to_shape_map()
for key in var_to_shape_map:
print("tensor_name: ", key)
#print(reader.get_tensor(key)) # Remove this if you want to print only variable names

TensorFlow 中 Max Pooling 2D 层的输出张量是多少?

【中文标题】TensorFlow 中 Max Pooling 2D 层的输出张量是多少?【英文标题】:What is output tensor of Max Pooling 2D Layer in TensorFlow? 【发布时间】:2017-09-13 04:52:19 【问题描述】:

我试图了解一些有关 tensorflow 的基础知识 我在阅读最大池化 2D 层的文档时被卡住了:https://www.tensorflow.org/tutorials/layers#pooling_layer_1

这是如何指定 max_pooling2d 的:

pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

其中conv1 有一个形状为[batch_size, image_width, image_height, channels] 的张量,具体在本例中为[batch_size, 28, 28, 32]

所以我们的输入是一个形状为:[batch_size, 28, 28, 32] 的张量。

我对最大池化 2D 层的理解是,它将应用大小为 pool_size(在本例中为 2x2)的过滤器,并将滑动窗口移动stride(也是 2x2)。这意味着图像的widthheight 都将减半,即我们最终将得到每个通道 14x14 像素(总共 32 个通道),这意味着我们的输出是一个形状为:[batch_size, 14, 14, 32] 的张量。

但是根据上面的链接,输出张量的形状是[batch_size, 14, 14, 1]

Our output tensor produced by max_pooling2d() (pool1) has a shape of 
[batch_size, 14, 14, 1]: the 2x2 filter reduces width and height by 50%.

我在这里错过了什么?

32 是如何转换为 1 的?

他们稍后在这里应用相同的逻辑:https://www.tensorflow.org/tutorials/layers#convolutional_layer_2_and_pooling_layer_2

但这次是正确的,即[batch_size, 14, 14, 64]变成[batch_size, 7, 7, 64](频道数相同)。

【问题讨论】:

【参考方案1】:

是的,使用 strides=2x2 的 2x2 max pool 会将数据减少一半,并且输出深度不会改变。这是我给定的测试代码,输出形状是(14, 14, 32),可能有问题?

#!/usr/bin/env python

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('./MNIST_data/', one_hot=True)

conv1 = tf.placeholder(tf.float32, [None,28,28,32])
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2,2], strides=2)
print pool1.get_shape()

输出是:

Extracting ./MNIST_data/train-images-idx3-ubyte.gz
Extracting ./MNIST_data/train-labels-idx1-ubyte.gz
Extracting ./MNIST_data/t10k-images-idx3-ubyte.gz
Extracting ./MNIST_data/t10k-labels-idx1-ubyte.gz
(?, 14, 14, 32)

【讨论】:

感谢您的回答。我想文档是错误的,即有错字?【参考方案2】:

Nikola,如你所想,已更正。

Documentation fixes for TF Layers tutorial (see #8301) Feedback on "A Guide to TF Layers: Building a Convolutional Neural Network" tutorial #8301

学习卷积和池化的概念,我遇到了这个线程。感谢您的问题,这将我带到了内容丰富的文档。

【讨论】:

以上是关于tensorflow如何查看模型的所有层的输入输出的tensor name的主要内容,如果未能解决你的问题,请参考以下文章

在具有急切执行的 TensorFlow 2.0 中,如何计算特定层的网络输出的梯度?

如何在keras tensorflow中将图像作为输入并获取另一个图像作为输出

模型输入必须来自 `tf.keras.Input` ...,它们不能是先前非输入层的输出

如何将 keras LSTM 层的输出输入到输入层?

如何知道 Tensorflow Lite 模型的输入/输出特征信息?

Tensorflow 模型:如何从 proto buff 文件中识别输入/输出节点名称?