2017-09-13 180 views
0

你好我想在下面的代碼中初始化名爲result的變量。 我嘗試使用此代碼初始化*當我嘗試服務。tensorflow服務未初始化

sess.run(tf.global_variables_initializer(),feed_dict = {userLat:0,userLon:0})

只想初始化變量。

使用該變量的原因是編寫validate_shape = false。

使用此選項的原因是爲了解決錯誤:將模型版本部署到Google Cloud ml引擎時,輸出的外部維度必須未知,'Variable:0'的外部維度爲1'。

當嘗試進行預測時,使用以下代碼進行初始化時,feed_dict爲0時將輸出一個值。

sess.run(tf.global_variables_initializer(),feed_dict = {userLat:0,userLon:0})

有一種方法簡單地初始化結果的值?

或者是否有可能將存儲的張量值的列表存儲爲帶有逗號而不帶形狀的字符串?

這是一個非常基本的問題。 對不起。 我是張量流的初學者。 我需要幫助。謝謝你的閱讀。

import tensorflow as tf 
import sys,os 

#define filename queue 
filenameQueue =tf.train.string_input_producer(['./data.csv'], 
shuffle=False,name='filename_queue') 

# define reader 
reader = tf.TextLineReader() 
key,value = reader.read(filenameQueue) 

#define decoder 
recordDefaults = [ ["null"],[0.0],[0.0]] 
sId,lat, lng = tf.decode_csv(
value, record_defaults=recordDefaults,field_delim=',') 

taxiData=[] 

with tf.Session() as sess: 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(sess=sess, coord=coord) 

    for i in range(18): 
     data=sess.run([sId, lat, lng]) 
     tmpTaxiData=[] 
     tmpTaxiData.append(data[0]) 
     tmpTaxiData.append(data[1]) 
     tmpTaxiData.append(data[2]) 
     taxiData.append(tmpTaxiData) 
    coord.request_stop() 
    coord.join(threads) 

from math import sin, cos,acos, sqrt, atan2, radians 

#server input data 
userLat = tf.placeholder(tf.float32, shape=[]) 
userLon = tf.placeholder(tf.float32, shape=[]) 

R = 6373.0 
radian=0.017453292519943295 


distanceList=[] 

for i in taxiData: 
    taxiId=tf.constant(i[0],dtype=tf.string,shape=[]) 
    taxiLat=tf.constant(i[1],dtype=tf.float32,shape=[]) 
    taxiLon=tf.constant(i[2],dtype=tf.float32,shape=[]) 



distanceValue=6371*tf.acos(tf.cos(radian*userLat)* 
tf.cos(radian*taxiLat)*tf.cos(radian*taxiLon- 
radian*126.8943311)+tf.sin(radian*37.4685225)*tf.sin(radian*taxiLat)) 

    tmpDistance=[] 

    tmpDistance.append(taxiId) 
    tmpDistance.append(distanceValue) 

    distanceList.append(tmpDistance) 


# result sort 
sId,distances=zip(*distanceList) 
indices = tf.nn.top_k(distances, k=len(distances)).indices 

gather=tf.gather(sId, indices[::-1])[0:5] 
result=tf.Variable(gather,validate_shape=False) 

print "Done training!" 


# serving 

import os 
from tensorflow.python.util import compat 

model_version = 1 
path = os.path.join("Taximodel", str(model_version)) 
builder = tf.saved_model.builder.SavedModelBuilder(path) 

with tf.Session() as sess: 
    builder.add_meta_graph_and_variables(
    sess, 
     [tf.saved_model.tag_constants.SERVING], 
     signature_def_map= { 
      "serving_default": 
tf.saved_model.signature_def_utils.predict_signature_def(
       inputs= {"userLat": userLat, "userLon":userLon}, 
       outputs= {"result": result}) 
    }) 

builder.save() 

print 'Done exporting' 

回答

0

您可以嘗試定義圖形,使輸出張量保留輸入張量的形狀(外部尺寸)。

例如,像:

#server input data 
userLoc = tf.placeholder(tf.float32, shape=[None, 2]) 

def calculate_dist(user_loc): 
    distanceList = [] 
    for i in taxiData: 
    taxiId=tf.constant(i[0],dtype=tf.string,shape=[]) 
    taxiLat=tf.constant(i[1],dtype=tf.float32,shape=[]) 
    taxiLon=tf.constant(i[2],dtype=tf.float32,shape=[]) 
    distanceValue=6371*tf.acos(tf.cos(radian*user_loc[0])* 
     tf.cos(radian*taxiLat)*tf.cos(radian*taxiLon- 
     radian*126.8943311)+tf.sin(radian*37.4685225)*tf.sin(radian*taxiLat)) 
    tmpDistance=[] 
    tmpDistance.append(taxiId) 
    tmpDistance.append(distanceValue) 
    distanceList.append(tmpDistance) 
    # result sort 
    sId,distances=zip(*distanceList) 
    indices = tf.nn.top_k(distances, k=len(distances)).indices 
    return tf.gather(sId, indices[::-1])[0:5] 

result = tf.map_fn(calculate_dist, userLoc)