如何获取要在iOS示例应用程序中使用的图层名称? (Tensorflow)

我是Tensorflow的新手,我正在尝试使用初始v3网络训练某些内容,以便在iPhone应用中使用。 我设法将我的图形导出为协议缓冲文件,手动删除丢失节点(正确,我希望),并将该.pb文件放在我的iOS项目中,但现在我收到以下错误:

Running model failed:Not found: FeedInputs: unable to find feed output input 

这似乎表明我在iOS应用程序中的input_layer_nameoutput_layer_name变量配置错误。

我在不同的地方看到,对于初始v3,它应该分别是Mulsoftmax ,但这些值对我来说不起作用。

我的问题是:什么是层(关于这个背景),我如何找出我的是什么?

这是我训练的模型的确切定义,但我没有看到“Mul”或“softmax”。

这是我能够学习的关于图层的内容,但它似乎是一个不同的概念,因为“Mul”不在该列表中。

我担心这可能是这个问题的重复,但“层”没有解释(它们是张量?)和graph.get_operations() 似乎已被弃用,或者我使用它错了。

正如MohamedEzz所写,Tensorflow图中没有图层。 只有可以放在相同名称范围内的操作。

通常,放置在相同范围内的单个层的操作和知道名称范围概念的应用程序可以将它们分组显示。

其中一个应用是Tensorboard 。 我相信使用Tensorboard是查找节点名称的最简单方法。

请考虑以下示例:

 import tensorflow as tf import tensorflow.contrib.slim.nets as nets input_placeholder = tf.placeholder(tf.float32, shape=(None, 224, 224, 3)) network = nets.inception.inception_v3(input_placeholder) writer = tf.summary.FileWriter('.', tf.get_default_graph()) writer.close() 

它为输入数据创建占位符,然后创建Inception v3网络并将事件数据(带图形)保存在当前目录中。

在同一目录中启动Tensorflow可以查看图形结构。

 tensorboard --logdir . 

Tensorboard将UI URL打印到控制台

 Starting TensorBoard 41 on port 6006 (You can navigate to http://192.168.128.73:6006) 

下面是此图的图像。 在此处输入图像描述

找到您感兴趣的节点并选择它以查找其名称(在左上角的信息窗格中)。

输入: 在此处输入图像描述 输出: 在此处输入图像描述

请注意,通常您不需要节点名称,也不需要张量名称。 在大多数情况下,只需添加:0到节点名称即可获得张量名称。

例如,使用图中的名称运行上面创建的Inception v3网络,使用以下代码(上述代码的延续):

 import numpy as np data = np.random.randn(1, 224, 224, 3) # just random data session = tf.InteractiveSession() session.run(tf.global_variables_initializer()) result = session.run('InceptionV3/Predictions/Softmax:0', feed_dict={'Placeholder:0': data}) # result.shape = (1, 1000) 

在tensorflow的核心,有ops(操作)和张量(n维数组)。 每个操作都需要张量并给出张量张量。 层只是围绕许多代表神经网络层的操作的便利包装器。

例如,卷积层主要由3个操作组成:

  1. conv2d op:这是在输入张量上滑动内核并在内核和底层输入窗口之间进行元素相乘的内容。
  2. bias_add op:将这些偏差添加到来自conv2d op的张量中
  3. 激活操作:将激活函数逐个元素地应用于bias_add操作的输出张量

要运行张量流模型,您需要提供提要(输入)和提取(所需的输出)。 这些是张量或张量名称。

从这行代码Inception_model看来,你需要的是一个名为'predictions'的张量,它具有n_class输出概率。

您观察到的( softmax )是产生predictions张量的op的类型

对于输入张量名称, inception_model.py代码不显示输入张量名称,因为它是函数的参数。 所以它取决于你给输入张量的名称。

创建图层或变量时,添加名为name的参数

 with tf.name_scope("output"): W2 = tf.Variable(tf.truncated_normal([num_filters, num_classes], stddev=0.1), name="W2") b2 = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b2") scores = tf.nn.xw_plus_b(h_pool_flat, W2, b2, name="scores") pred_y = tf.nn.softmax(scores,name="pred_y") 

在这种情况下,我可以使用“output / pred_y”访问最终预测值。 如果你没有name_scope,你可以使用“pred_y”来获取值

 conv = tf.nn.conv1d(word_embeddedings, W1, stride=stride_size, padding="VALID", name="conv") #will have dimensions [batch_size,out_width,num_filters] out_width is a function of max_words,filter_size and stride_size # Apply nonlinearity h = tf.nn.relu(tf.nn.bias_add(conv, b1), name="relu") 

我将图层称为“conv”并在下一层使用它。 像我在这里做的那样粘贴你的片段