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

时间:2017-04-02 23:45:16

标签: 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,但这些值对我不起作用。

我的问题是:什么是图层(关于此背景),以及如何找出我的图片?

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

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

我担心这可能与this question重复,但“图层”没有解释(它们是张量?)而且graph.get_operations() 似乎被弃用了,或者我使用它错了。

3 个答案:

答案 0 :(得分:1)

正如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网址打印到控制台

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

下图是此图的图像。 enter image description here

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

输入: enter image description here 输出: enter image description here

请注意,通常您不需要节点名称,也不需要张量名称。在大多数情况下,只需将: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)

答案 1 :(得分:0)

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

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

  1. conv2d op:这是在输入张量上滑动内核并在内核和底层输入窗口之间进行元素相乘的内容。
  2. bias_add op:将偏差添加到来自conv2d op
  3. 的张量中
  4. 激活操作:将激活功能元素应用于bias_add op的输出张量
  5. 要运行张量流模型,您需要提供提要(输入)和提取(所需的输出)。这些是张量或张量名称。

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

    您观察到的内容(softmax)是产生predictions张量的操作类型

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

答案 2 :(得分:0)

创建图层或变量时,添加名为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")

我打电话给图层"转换"并在下一层使用它。像我在这里做的那样粘贴你的片段