2017-04-02 2 views
0

저는 Tensorflow에 매우 익숙하며 iPhone app에서 사용하기 위해 초기 v3 네트워크를 사용하여 무언가를 훈련시키고 있습니다. 내가 수동으로 (I 희망, 제대로) 드롭 아웃 노드를 제거하는 protocolbuffer 파일로 내 그래프를 수출 관리, 내 아이폰 OS 프로젝트에 그 .pb 또 파일을 배치했지만, 지금은 다음과 같은 오류 받고 있어요 :iOS 샘플 앱에서 사용할 레이어 이름을 얻으려면 어떻게해야합니까? (Tensorflow)

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()은 어쩌면 내가 잘못 사용하고이되지 않는 것 같다, 또는.

답변

0

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() 

그것은 입력 된 데이터에 대한 지정자를 작성 후 셉션 v3의 네트워크를 생성하고 현재 디렉토리 (그래프) 이벤트 데이터를 저장한다.

동일한 디렉토리에 Tensorflow를 시작하면 그래프 구조를 볼 수 있습니다.

tensorboard --logdir . 

는 Tensorboard에서는이 그래프의 이미지 콘솔

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

UI에 URL을 출력한다. enter image description here

관심있는 노드를 찾고 이름을 찾으려면 왼쪽 상단 정보 창에서 찾으십시오.

입력 : enter image description here 출력 : enter image description here

일반적으로 노드 이름 만 텐서 이름 필요가 없다는 것을 유의하시기 바랍니다. 대부분의 경우 텐서 이름을 얻기 위해 노드 이름에 :0을 추가하면됩니다.

그래프는 다음 코드 (위의 코드의 계속)를 사용에서 이름을 사용하여 위에서 만든 셉션 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) 
+0

이것은 가장 포괄적 인 대답이며 유용한 정보를 제공합니다. Tensorboard를 사용하는 대신 그래프의 모든 노드를 반복하여 인쇄하여 이름을 찾았습니다. 결국 추측 코드에서 준 것과 비슷한 것으로 끝납니다. 또한 github의 Inception v3 모델에는 존재하지 않는 자리 표시 자 노드의 중요성이 강조 표시되어 있으므로 내 자신을 추가하고 전달했습니다. 대답을 수락 된 대답으로 사용합니다. 모든 도움을 주셔서 대단히 감사합니다! –

0

텐서 흐름의 핵심에는 연산 (연산)과 텐서 (n 차원 배열)가 있습니다. 각 연산은 텐서 (tensors)를 취하고 텐서스 (back tensors)를 제공합니다 레이어는 신경망 레이어를 나타내는 많은 함수에 대한 편리한 래퍼입니다.

는 예를 들어 컨벌루션 층은 주로 3 OPS 구성되어

  1. conv2d 연산이 입력 텐서 통해 커널 슬라이드 커널과 기본 입력 창 사이 소자 와이즈 곱셈을 수행하는 것이다.
  2. bias_add 영업 이익은 다음 conv2d 연산
  3. 활성화 연산에서 나오는 텐서에 대한 편견을 추가하십시오 tensorflow 모델을 실행하려면 bias_add 연산

의 출력 텐서에 요소 현명한 활성화 함수를 적용 , 피드 (입력) 및 가져 오기 (원하는 출력)를 제공합니다. 이들은 텐서 또는 텐서 이름입니다.

이 코드 줄 Inception_model에서 n_class 출력 확률을 가진 'predictions'이라는 이름의 텐서가 필요합니다. 당신은 관찰 무엇

(softmax) 입력 텐서 이름에 대한 이름으로 predictions 텐서

를 생성 한 연산의 유형입니다, 그것은 함수에 인수 이후, 입력 텐서 이름을 표시하지 않는 inception_model.py 코드 . 그래서 그것은 입력 텐서에 주어진 이름에 달려 있습니다.

0

당신은 당신의 레이어 나 변수가 나는 "출력/pred_y"을 사용하여 최종 예측 값에 액세스 할 수 있습니다이 경우 매개 변수라는 이름을

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") 

를 추가 생성 할 때. 당신이 name_scope 해달라고하면 그냥 레이어 "전환"이라고하며 다음 층에서 그것을 사용되는 값

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") 

에 도착 "pred_y"를 사용할 수 있습니다. 여기에서했던 것처럼 스 니펫을 붙여 넣으십시오.

+0

나는 문제가있어 확실하지 않다을 필자의 경우 출력물에 액세스하면 앱에서 FeedInput이라는 '입력'을 찾을 수 없다고 생각합니다. 내 첫 번째 Conv2d op에'name' 인수를 추가하고이를 "image_input"이라고 부르며 일치시킬 app의 input_layer_name 변수의 이름을 지정했지만 여전히 찾을 수는 없습니다. –

+0

해당 코드를 붙여 넣을 수 있습니까? 내가 conv 레이어를 포함 대답을 편집 오전 – LGG

+1

그것은 ios_camera 예제 애플 리케이션에 정말이야,하지만 난 실제로 이미 작동하도록했습니다.내가 찾고 있었던 해답은 다중면 (multiple-faceted)입니다. 앱은 자리 표시 자 텐서 (placeholder tensor)의 이름을 찾고 있으며, 그래프의 모든 노드를 반복하고 각 이름을 인쇄하여 찾은 전체 이름을 찾고 있습니다. 정식 이름은 tower_0/image_input : 0이되었습니다. (처음에는 그 이름을 가진 자리 표시 자 Tensor를 만든 후에 물론). 나는 그것이 존재하지 않았거나 Inception 모델에서 명명되지 않았다는 것을 믿을 수 없다. 이것은 초보자가 확장하기 어렵게 만든다. –

관련 문제