Tensor XXX is not an element of this graph

解决问题参考的这篇博客:https://blog.csdn.net/hnyzyty/article/details/84998061
最近做音频识别的项目,想把音频采集和识别分离开,所以使用ros结点进行封装,在封装的过程中遇到了这个问题,使用python文件执行是没问题的,但是在封装到ros回调函数中就报上面的错误了.

单独执行这个文件是可以运行的.

import os
import tensorflow as tf
import numpy as np



#读取txt文件中的特征数据
def loadData(infile,k):
   
    f=open(infile,'r')
    sourceInLine=f.readlines()
    dataset=[]
    for line in sourceInLine:
        temp1=line.strip('\n')
        temp2=temp1.split(',')
        dataset.append(temp2)
    for i in range(0,len(dataset)):
        for j in range(k+1):
            dataset[i].append(float(dataset[i][j]))
        del(dataset[i][0:k+1])
    return dataset



# =============================================================================
# #读取训练文件中的特征值(读取的txt文件内容,转换为float格式的数字之后,发现每行数据首端增加‘ ’空格元素)
# def loadData(infile,k):
#     
#     f=open(infile,'r')
#     sourceInLine=f.readlines()
#     dataset=[]
#     for line in sourceInLine:
#         temp1=line.strip('\n')
#         temp2=temp1.split(',')
#         dataset.append(temp2)
#     print(dataset[0][0])
#     temp3=dataset[0][0].split(' ')
#     print(temp3)
#     for i in range(0,len(dataset)):
#         for j in range(k):
#             dataset[i].append(float(dataset[i][j]))
#         del(dataset[i][0:k])
#     return dataset
# =============================================================================

k=34

#定义待测试的特征数据的路径
filename = '6.txt'
#filename = '156n_34.txt'

#读取测试文件中的数据
data_x=loadData(filename,k)

#剔除读取的数据中每行多出的空格' '
for i in range(0,len(data_x)):
    data_x[i].pop(0)
print(data_x[0])
#for i in range(0,len(data_x)):
for i in range(0,len(data_x)):
        for j in range(0,len(data_x[i])):
            a=(data_x[i][j]+1)/2.0
            data_x[i][j]=a
print(data_x[0])
#转换数据的格式
data_x=np.array(data_x)


#初始化变量
init = tf.global_variables_initializer()

#执行会话,测试
with tf.Session() as sess:
    sess.run(init)
    
# =============================================================================
#     #应用单分类CNN模型测试
#     new_saver=tf.train.import_meta_graph('one_class_cnn_Model/Model-10.meta')
#     new_saver.restore(sess,'one_class_cnn_Model/Model-10')
#     
#     graph=tf.get_default_graph()
#     pred=tf.get_collection('predic')[0]
#     input_x=graph.get_operation_by_name('data_x').outputs[0]
#     
#   
#     pred_y=sess.run(pred,feed_dict={input_x:data_x})
#     print(pred_y)
# =============================================================================
    
    #应用于自编码检测
    new_saver=tf.train.import_meta_graph('encodeModel/enModel.meta')
    new_saver.restore(sess,'encodeModel/enModel')
    
    graph=tf.get_default_graph()
    pred=tf.get_collection('predi')[0]
    cost=tf.get_collection('cost_loss')[0]
    input_X=graph.get_operation_by_name('en34_x').outputs[0]
    pred_y=sess.run(pred,feed_dict={input_X:data_x})
    
# =============================================================================
#     loss=sess.run(cost,feed_dict={input_X:data_x})
#     print(loss)
# =============================================================================
    
    #cost=tf.reduce_mean(-tf.log(1-tf.minimum(0.999999,tf.abs(X-y_pred))))
    print(123)
    print(data_x)
    print(pred_y)
    print pred_y.shape, data_x.shape
    #loss=tf.reduce_mean(tf.pow(data_x - pred_y, 2))
    #loss=tf.reduce_mean(-tf.log(1-tf.minimum(0.999999,tf.cast(tf.abs(data_x - pred_y),tf.float32))))
    loss=tf.reduce_mean(-tf.log(1-tf.abs(data_x-pred_y)))
    #loss=tf.abs(data_x-pred_y)
    loss_s=[]
    for i in range(0,len(data_x)):
        #a=tf.reduce_mean(tf.pow(data_x[i]-pred_y[i],2))   #tf.cast(correct_pred, tf.float32)
        #a=tf.reduce_mean(-tf.log(1-tf.minimum(0.999999,tf.cast(tf.abs(data_x[i] - pred_y[i]),tf.float32))))
        a=tf.reduce_mean(-tf.log(1-tf.abs(data_x[i]-pred_y[i])))
        loss_s.append(a)
  #  print('loss_s')
   # c_loss_s=sess.run(loss_s)
   # print(c_loss_s)
    print('loss')
    c_loss=sess.run(loss)
    print(c_loss)

错误的方式

#!/usr/bin/env python

# -*- coding: utf-8 -*-
import rospy
from std_msgs.msg import Int16
from audio_common_msgs.msg import AudioData
from audio_common_msgs.msg import AudioFeature
import numpy as np
import os
import sys
import time
import tensorflow as tf

tf_sess = tf.Session()
    
init = tf.global_variables_initializer()
tf_sess.run(init)

new_saver=tf.train.import_meta_graph('/home/sl/work/project/SoundRecog/audio_ws/src/audio_recognize/encodeModel/enModel.meta')
new_saver.restore(tf_sess,'/home/sl/work/project/SoundRecog/audio_ws/src/audio_recognize/encodeModel/enModel')

graph=tf.get_default_graph()
pred=tf.get_collection('predi')[0]
cost=tf.get_collection('cost_loss')[0]
input_X=graph.get_operation_by_name('en34_x').outputs[0]


def on_audio(feature):
    #graph=tf.get_default_graph()
    data_x = np.array(feature.data)
    data_x = data_x.reshape((1,34))
    pred_y=tf_sess.run(pred,feed_dict={input_X:data_x})


    #print(pred_y[0])
    #data_x = data_x.reshape(1,34)
    #print(data_x[0])
    print "123 " 
    print pred_y.shape, data_x.shape
    #loss=tf.reduce_mean(tf.pow(data_x - pred_y, 2))
    #loss=tf.reduce_mean(-tf.log(1-tf.minimum(0.999999,tf.cast(tf.abs(data_x - pred_y),tf.float32))))
    #loss=tf.abs(data_x-pred_y)
    loss=tf.reduce_mean(-tf.log(1-tf.abs(data_x-pred_y)))
    
    c_loss=tf_sess.run(loss)#这里会报错
    print(c_loss)

# loss_s=[]
# for i in range(0,len(data_x)):
        #a=tf.reduce_mean(tf.pow(data_x[i]-pred_y[i],2))   #tf.cast(correct_pred, tf.float32)
        #a=tf.reduce_mean(-tf.log(1-tf.minimum(0.999999,tf.cast(tf.abs(data_x[i] - pred_y[i]),tf.float32))))
#      a=tf.reduce_mean(-tf.log(1-tf.abs(data_x[i]-pred_y[i])))
#      loss_s.append(a)
#  print('loss_s')
#  c_loss_s=sess.run(loss_s)
#  print(c_loss_s)
    print('loss')

if __name__ == '__main__':
    rospy.init_node("ros_sound_recognize")
    
    rospy.loginfo("start ros_sound_recognize info");
 
    _sub = rospy.Subscriber("audio/audio_feature", AudioFeature, on_audio, queue_size=2, buff_size=2**24)
    rospy.spin()

 #   tensor = RosSoundRecognizer()
 #   tensor.main()
    tf_sess.close()


错误应该是说,运行的graph不在这个session里,图是运行在session里的,这里不知道为什么会报这个错误,改成:

 data_x = np.array(feature.data)
        data_x = data_x.reshape((1, 34))

        pred_y=self._tf_sess.run(self._pred,feed_dict={self._input_X:data_x})
        #print data_x
        #print pred_y
        print pred_y.shape, data_x.shape
        with tf.Session(graph=self._graph) as sess:
            sess.run(tf.global_variables_initializer())
            loss = tf.reduce_mean(-tf.log(1 - tf.abs(data_x - pred_y)))
            real_loss = sess.run(loss)
            print("c_loss is")
            print(real_loss)
            
            self._pub.publish(real_loss)

新建一个session,然后在这个session中计算就不报错了.
有哪位知道错误在哪里请留言赐教.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章