0

:Gcloud ML 엔진 입력 배열에 추가 차원을 추가 다음 코드로 Gcloud ML 엔진을 설정하려고

import numpy as np 
import tensorflow as tf 

x = tf.placeholder('float', shape=[None, 3], name='x') 
w = tf.Variable(tf.zeros([3, 2])) 
y = tf.nn.softmax(tf.matmul(x, w), name='y') 

sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 

tensor_info_x = tf.saved_model.utils.build_tensor_info(x) 
tensor_info_y = tf.saved_model.utils.build_tensor_info(y) 

prediction_signature = (
    tf.saved_model.signature_def_utils.build_signature_def(
     inputs={'inputs': tensor_info_x}, 
     outputs={'scores': tensor_info_y}, 
     method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME) 
    ) 

export_path = './test_exports' 
builder = tf.saved_model.builder.SavedModelBuilder(export_path) 
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op') 
builder.add_meta_graph_and_variables(
     sess, [tf.saved_model.tag_constants.SERVING], 
     signature_def_map={ 
      'predict_images': 
       prediction_signature 
     }, 
     legacy_init_op=legacy_init_op) 
builder.save() 

I가 예측에 사용되는 샘플 입력 JSON 파일이다

{ "inputs" : [[ 0.32439028, 0.07830289, 0.30881251], [ 0.32439028, 0.07830289, 0.30881251]] } 

보시다시피 입력 배열의 모양은 (2, 3)입니다. 모델에 입력으로이 먹이 그러나, 나는 오류에 직면하고 있습니다 :

Cannot feed value of shape (1, 2, 3) for Tensor u'x:0', which has shape '(?, 3)' (Error code: 2)

(3 1), 모델이 완벽하게 작동 크기의 입력을주는, 더 테스트하려면. 추가 아이디어가 어떻게 추가되고 있는지 알기 원하십니까?

편집 : 테스트에 사용

명령 : ML 엔진은 입력의 배치, 단지 하나 예측

gcloud ml-engine local predict --model-dir=./test_exports --json-instances inputs.json 

답변

0

. 따라서 서빙 입력 자리 표시자를 [None, 2, 3] (으)로 변경해야합니다.

덧붙여 말하자면, 모델 프로세스를 배치하는 것이 교육에도 좋습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 약간 혼란 스럽다. 내 입력은 길이가 3 인 1 차원 배열로되어 있습니다. 따라서 배치로 만들기 위해 x의 크기를 [없음, 3]으로 지정했습니다. 이 과정은 [N, 3] 입력 행렬과 [3, w] 가중 행렬의 행렬 곱셈을 수행합니다. 여기서 N은 배치의 입력 수를 나타냅니다. 크기 2가 고정되어 있지 않기 때문에 X의 모양을 [없음, 2,3]으로 변경할 수 없습니다. 이 문제를 어떻게 해결할 생각인가요? –

+1

Aah. json 파일에서 다른 인스턴스를 다른 줄에 배치하십시오. 입력 내용은 1 차원 배열이어야합니다. – Lak

+0

유효한 포인트와 같습니다. 내가 그것을 밖으로 시도하자. –

0

동일하게 작업하는 모든 사용자를위한 솔루션 게시.

위의 예제를 보면, ml 엔진이 모델에 제공 한 입력은 [1, N, m] 모양으로되어 있습니다. 여기서 N은 입력 수이고 m은 피처 크기입니다. 다음과 같이 따라서이 형식에 대한 입력을 변환, tf.squeeze()를 사용

x = tf.placeholder('float', shape=[1, None, 3], name='x') 
x_exp = tf.squeeze(x, axis=0) 

지금 당신은 추가 처리를 위해 x_exp를 사용할 수 있습니다.

관련 문제