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中計算就不報錯了.
有哪位知道錯誤在哪裏請留言賜教.

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