1

Google 클라우드에 셉션을 재교육 할 때 레이블 이름을 변경 : 나는 내 수업의 인덱스 등을 얻을 API와 예측을 할 때, 그러나 https://cloud.google.com/blog/big-data/2016/12/how-to-train-and-classify-images-using-google-cloud-machine-learning-and-cloud-dataflow나는 현재 이미지 분류 셉션을 재교육 할 수있는 튜토리얼을 따라 ML

을 라벨. 그러나 나는 API가 실제로 내가 좀하고 싶습니다 대신

​predictions: 
- key: '0' 
    prediction: 4 
    scores: 
    - 8.11998e-09 
    - 2.64907e-08 
    - 1.10307e-06 

의 실제 클래스 이름 등으로 다시 나에게 문자열을 제공한다는 싶습니다

​predictions: 
- key: '0' 
    prediction: ROSES 
    scores: 
    - 8.11998e-09 
    - 2.64907e-08 
    - 1.10307e-06 

를 구글 API에 대한 참조를 보면 그 가능해야한다 : 나는 이미

outputs = { 
    'key': keys.name, 
    'prediction': tensors.predictions[0].name, 
    'scores': tensors.predictions[1].name 
} 
tf.add_to_collection('outputs', json.dumps(outputs)) 
에 다음 model.py에 변경하려고 https://cloud.google.com/ml-engine/reference/rest/v1/projects/predict

16,

if tensors.predictions[0].name == 0: 
    pred_name ='roses' 
elif tensors.predictions[0].name == 1: 
    pred_name ='tulips' 


outputs = { 
    'key': keys.name, 
    'prediction': pred_name, 
    'scores': tensors.predictions[1].name 
} 
tf.add_to_collection('outputs', json.dumps(outputs)) 

에하지만이 작동하지 않습니다.

다음은 preprocess.py 파일에서이 부분을 변경하는 것입니다. 대신 색인을 사용하면서 문자열 레이블을 사용하고 싶습니다.

def process(self, row, all_labels): 
    try: 
     row = row.element 
    except AttributeError: 
     pass 
    if not self.label_to_id_map: 
     for i, label in enumerate(all_labels): 
     label = label.strip() 
     if label: 
      self.label_to_id_map[label] = label #i 

label_ids = [] 
for label in row[1:]: 
    try: 
    label_ids.append(label.strip()) 
    #label_ids.append(self.label_to_id_map[label.strip()]) 
    except KeyError: 
    unknown_label.inc() 

하지만이 오류 제공합니다

TypeError: 'roses' has type <type 'str'>, but expected one of: (<type 'int'>, <type 'long'>) [while running 'Embed and make TFExample'] 

이 때문에 내가 문자열을 허용하기 위해, preprocess.py 여기에 뭔가를 변경해야한다고 생각 :

example = tf.train.Example(features=tf.train.Features(feature={ 
     'image_uri': _bytes_feature([uri]), 
     'embedding': _float_feature(embedding.ravel().tolist()), 
    })) 

if label_ids: 
    label_ids.sort() 
    example.features.feature['label'].int64_list.value.extend(label_ids) 

하지만 알 수는 없습니다. str_list처럼 someting을 찾을 수 없으므로 그것을 적절하게 변경하는 방법. 아무도 여기 좀 도와 줄래?

답변

0

온라인 예측에서 확실히 허용되므로 모델 자체를 업데이트해야 int에서 string으로 변환 할 수 있습니다.

파이썬 코드는 모델에서 수행해야 할 계산을 설명하는 그래프를 작성하는 것입니다. 파이썬 코드를 온라인 예측으로 보내지 않으면 빌드 한 그래프가 전송됩니다.

여러분이 변경 한 내용이 파이썬에 있기 때문에 이러한 구분이 중요합니다. 입력이나 예측이 아직 없으므로 값을 검사 할 수 없습니다. 대신 수행 할 작업은 내보낼 그래프에 동등한 조회를 추가하는 것입니다.

당신은 너무 같은 코드를 수정할 수 :

labels = tf.constant(['cars', 'trucks', 'suvs']) 
predicted_indices = tf.argmax(softmax, 1) 
prediction = tf.gather(labels, predicted_indices) 

을 그리고 원래의 코드에서 그대로 입력/출력을 떠나