2017-08-11 4 views
0

Ich habe Autoencoder auf meine benutzerdefinierten Bilder Daten für die Erkennung der Gebärdensprache implementiert.Jetzt möchte ich Tensoren Objekt der Ausgabeschicht zu einem numpy Array speichern. Ich habe Session.run (Tensor) und Tensor.eval() versucht. Hier ist mein Code.Wie kann ich Tensors Objekt in ein numpy Array speichern?

#define model 
x= tf.placeholder(tf.float32,[None,784]) 
y_=tf.placeholder(tf.float32,[None,6]) 
k=190 
l=180 
m=150 
n=130 
o=100 
num_of_epoch=10 
w1=tf.Variable(tf.truncated_normal([784,k],stddev=0.1)) 
b1=tf.Variable(tf.zeros([k])) 
w2=tf.Variable(tf.truncated_normal([k,l],stddev=0.1)) 
b2=tf.Variable(tf.zeros([l])) 
w3=tf.Variable(tf.truncated_normal([l,m],stddev=0.1)) 
b3=tf.Variable(tf.zeros([m])) 
w4=tf.Variable(tf.truncated_normal([m,n],stddev=0.1)) 
b4=tf.Variable(tf.zeros([n])) 
w5=tf.Variable(tf.truncated_normal([n,o],stddev=0.1)) 
b5=tf.Variable(tf.zeros([o])) 
w6=tf.Variable(tf.truncated_normal([o,6],stddev=0.1)) 
b6=tf.Variable(tf.zeros([6])) 
y1=tf.nn.relu(tf.matmul(x,w1)+b1) 
y2=tf.nn.relu(tf.matmul(y1,w2)+b2) 
y3=tf.nn.relu(tf.matmul(y2,w3)+b3) 
y4=tf.nn.relu(tf.matmul(y3,w4)+b4) 
y5=tf.nn.relu(tf.matmul(y4,w5)+b5) 
y=tf.nn.softmax(tf.matmul(y5,w6)+b6) 
cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y), 
reduction_indices=[1])) 
train_step=tf.train.GradientDescentOptimizer(0.03).minimize(cross_entropy) 
init=tf.global_variables_initializer() 
with tf.Session() as sess: 
    sess.run(init) 
    for i in range(num_of_epoch):  
     train_data = {x:x_train,y_:y_train} 
     sess.run(train_step,feed_dict=train_data) 
    currect_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) 
    accuracy=tf.reduce_mean(tf.cast(currect_prediction,tf.float32)) 
    sess.run(accuracy,feed_dict={x:x_train,y_:y_train}) 
    currect_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) 
    accuracy=tf.reduce_mean(tf.cast(currect_prediction,tf.float32)) 
    sess.run(accuracy,feed_dict= {x:x_test,y_:y_test}) 
    y_p = tf.argmax(y, 1).eval() #this line shows me the error 
    print(y_p) 

Ich bekomme den folgenden Fehler. Wie kann ich diesen Fehler beheben und Tensor-Daten in numpy Array speichern?

Traceback (most recent call last): 
File "<ipython-input-45-5e38490a3e8e>", line 1, in <module> 
runfile('C:/Users/RIFAT/PycharmProjects/tensorflow_autoencoder 
/autoencoderreconstruction.py', 
wdir='C:/Users/RIFAT/PycharmProjects/tensorflow_autoencoder') 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\spyder\utils 
\site\sitecustomize.py", line 880, in runfile 
execfile(filename, namespace) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\spyder\utils 
\site\sitecustomize.py", line 102, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 
File "C:/Users/RIFAT/PycharmProjects/tensorflow_autoencoder 
/autoencoderreconstruction.py", line 112, in <module> 
y_p = tf.argmax(y, 1).eval() 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\framework\ops.py", line 606, in eval 
return _eval_using_default_session(self, feed_dict, self.graph, session) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\framework\ops.py", line 3928, in _eval_using_default_session 
return session.run(tensors, feed_dict) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python\client 
\session.py", line 789, in run 
run_metadata_ptr) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python\client 
\session.py", line 997, in _run 
feed_dict_string, options, run_metadata) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python\client 
\session.py", line 1132, in _do_run 
target_list, options, run_metadata) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python\client 
\session.py", line 1152, in _do_call 
raise type(e)(node_def, op, message) 
InvalidArgumentError: Shape [-1,784] has negative dimensions 
[[Node: Placeholder_62 = Placeholder[dtype=DT_FLOAT, shape=[?,784], 
_device="/job:localhost/replica:0/task:0/cpu:0"]()]] 
Caused by op 'Placeholder_62', defined at: 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\spyder\utils\ipython 
\start_kernel.py", line 231, in <module> 
main() 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\spyder\utils\ipython 
\start_kernel.py", line 227, in main 
kernel.start() 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\ipykernel\kernelapp.py", 
line 477, in start 
ioloop.IOLoop.instance().start() 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\zmq\eventloop 
\ioloop.py", line 177, in start 
super(ZMQIOLoop, self).start() 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tornado\ioloop.py", line 
888, in start 
handler_func(fd_obj, events) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tornad 
\stack_context.py", line 277, in null_wrapper 
return fn(*args, **kwargs) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\zmq\eventloop 
\zmqstream.py", line 440, in _handle_events 
self._handle_recv() 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\zmq\eventloop 
\zmqstream.py", line 472, in _handle_recv 
self._run_callback(callback, msg) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\zmq\eventloop 
\zmqstream.py", line 414, in _run_callback 
callback(*args, **kwargs) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tornado 
\stack_context.py", line 277, in null_wrapper 
return fn(*args, **kwargs) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\ipykernel 
\kernelbase.py", line 283, in dispatcher 
return self.dispatch_shell(stream, msg) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\ipykernel 
\kernelbase.py", line 235, in dispatch_shell 
handler(stream, idents, msg) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\ipykernel 
\kernelbase.py", line 399, in execute_request 
user_expressions, allow_stdin) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\ipykernel\ipkernel.py", 
line 196, in do_execute 
res = shell.run_cell(code, store_history=store_history, silent=silent) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\ipykernel\zmqshell.py", 
line 533, in run_cell 
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\IPython 
\core\interactiveshell.py", line 2717, in run_cell 
interactivity=interactivity, compiler=compiler, result=result) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\IPython 
\core\interactiveshell.py", line 2827, in run_ast_nodes 
if self.run_code(code, result): 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\IPython 
\core\interactiveshell.py", line 2881, in run_code 
exec(code_obj, self.user_global_ns, self.user_ns) 
File "<ipython-input-45-5e38490a3e8e>", line 1, in <module> 
runfile('C:/Users/RIFAT/PycharmProjects/tensorflow_autoencoder 
/autoencoderreconstruction.py', wdir='C:/Users/RIFAT/PycharmProjects 
/tensorflow_autoencoder') 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\spyder\utils 
\site\sitecustomize.py", line 880, in runfile 
execfile(filename, namespace) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\spyder\utils 
\site\sitecustomize.py", line 102, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 
File "C:/Users/RIFAT/PycharmProjects/tensorflow_autoencoder 
/autoencoderreconstruction.py", line 62, in <module> 
x= tf.placeholder(tf.float32,[None,784]) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\ops\array_ops.py", line 1530, in placeholder 
return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\ops\gen_array_ops.py", line 1954, in _placeholder 
name=name) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\framework\op_def_library.py", line 767, in apply_op 
op_def=op_def) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\framework\ops.py", line 2506, in create_op 
original_op=self._default_original_op, op_def=op_def) 
File "C:\Users\RIFAT\Anaconda3\lib\site-packages\tensorflow\python 
\framework\ops.py", line 1269, in __init__ 
self._traceback = _extract_stack() 
InvalidArgumentError (see above for traceback): Shape [-1,784] has 
negative dimensions 
[[Node: Placeholder_62 = Placeholder[dtype=DT_FLOAT, shape=[?,784], 
_device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

Antwort

0

Ihre Frage ist nicht 100% klar. Der Fehler, den Sie sehen, ist darauf zurückzuführen, dass Sie versuchen, das Diagramm ohne das Feed-Diktat auszuführen. Um die Ausgabe der Vorhersage zu sehen (das mit dem argmax ist (y, 1) vorhanden) Sie würden einfach laufen:

y_p = sess.run(tf.argmax(y, 1), feed_dict=train_data) 
print(y_p) 

Aber das gibt Ihnen den tatsächlichen vorhergesagten Wert (auf den Bahndaten, da dies gefüttert, um dies auf die Testdaten zu bekommen, einfach in die test_data geted. Um die Wahrscheinlichkeiten zu erhalten werden Sie ziehen y ohne argmax:

y_p = sess.run(y, feed_dict=train_data) 
print(y_p) 
+0

vielen Dank .this mein Problem gelöst. – Rifat

2

Das ist, weil y ein Tensor in der grafischen Darstellung und nicht um eine Variable. Wenn Sie .eval() für eine Variable ausführen, gibt es den aktuellen Wert, der von dieser Variablen in dieser Sitzung gehalten wird, aber wenn Sie .eval() auf einem Tensor statt tf.argmax(y, 1).eval() in Ihrem Fall ausführen, dann führt Tensor Flow das Diagramm zu diesem Knoten, um den Wert davon zu erhalten Knoten. Und da in Ihrem Fall es nicht den Wert des Platzhalters x und während der Ausführung des Diagramms erhält, gibt es den Fehler. Eine Möglichkeit, diesen Fehler zu beheben ist, indem die Werte des Platzhalter in Ihrem eval Aufruf wie folgt:

tf.argmax(y, 1).eval(feed_dict= {x:x_test,y_:y_test})

Aber eine bevorzugte Art und Weise gibt den Kontext Ihrer Sitzung mit dem eval Anruf, in dem Fall es wird den Wert des Tensors zurückgeben. Ex:

tf.argmax(y, 1).eval(session = sess)

Verwandte Themen