0

Bonjour Je souhaite initialiser le résultat de la variable nommée dans le code ci-dessous. J'ai essayé d'initialiser avec ce code * quand j'ai essayé de servir.service tensorflow non initialisé

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

Je veux juste initialiser la variable.

La raison de l'utilisation de la variable est d'écrire validate_shape = false.

La raison de l'utilisation de cette option est de résoudre l'erreur 'La dimension externe des sorties doit être inconnue, la dimension externe de' Variable: 0 'est 1' lors du déploiement de la version du modèle dans le moteur Google Cloud ml.

L'initialisation avec le code suivant affichera une valeur lorsque feed_dict vaut 0 lors d'une tentative de prédiction.

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

est-il un moyen d'initialiser simplement la valeur du résultat?

Ou est-il possible de stocker la liste des valeurs de tenseurs stockées en tant que chaîne avec une virgule sans forme?

C'est une question très basique. Je suis désolé. Je suis un débutant du courant tensoriel. J'ai besoin d'aide. Merci pour la lecture.

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' 

Répondre

0

On peut essayer de définir le graphique de sorte que le tenseur de sortie conserve la forme (dimension extérieure) du tenseur d'entrée.

Par exemple, quelque chose comme:

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