2016-11-10 3 views
0

Im folgenden Code schreibe ich eine vier Schleife, um die Fibonacci-Sequenz zu drucken, um mit TensorFlow zu üben. Nach einigen Iterationen werden die Zahlen jedoch negativ und geben nur Nullen zurück. Warum? Wie kann ich das beheben? Es funktioniert gut, wenn ich übrigens Floats verwende. Warum ist das im Vergleich zu einem einfachen Algorithmus so langsam?Fehler beim Hinzufügen von zwei großen Zahlen in TensorFlow

import tensorflow as tf 

var1 = tf.Variable(1, tf.int8) 
var2 = tf.Variable(1, tf.int8) 
temp = tf.Variable(0, tf.int8) 

var12 = tf.add(var1, var2) 
task1 = tf.assign(var1, var2) 
task2 = tf.assign(var2, var12) 

task3 = tf.assign(var2, tf.add(var1, temp)) 

init_op = (tf.initialize_all_variables()) 

with tf.Session() as sess: 
    sess.run(init_op) 
    for _ in range(50): 
     sess.run(var12) 
     sess.run(task1) 
     sess.run(task2) 
     print(var12.eval(), end=',') 

Ausgang: 3,6,12,24,48,96,192,384,768,1536,3072,6144,12288,24576,49152,98304,196608,393216,786432,1572864,3145728,6291456,12582912, 25165824,50331648,100663296,201326592,406553184,805306368,1610612736, -1073741824, -2147483648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,

Antwort

1

Für Ihre Hauptfrage: Es ist ein Problem, wie Computer Zahlen speichern. Was Sie hier erfahren, heißt integer overflow.

Die Zahlen passen nicht in den Variablen und Tensorflow nicht versucht, dieses Problem zu beheben, weil, dass es verlangsamen würde (vielleicht sind Sie Python verwendet, um dieses für Sie handhaben. 999**999 ftw)

Ihre Variablen sind vom Typ int32, weil das die Standardeinstellung ist. Sie übergeben tf.int8 zu tf.Variable. Ein int8 würde bei 128 überrollen. Aber es landet im Trainable Parameter. Schalte das zu:

tf.Variable(1,dtype=tf.int64) 

int64 ist größer.

Auch das ist nicht die richtige Reihenfolge. Es verdoppelt nur das vorherige Element. Das sess.run(var12) tut nichts (var ist ein schlechter Name dafür, es ist keine Variable). var12 wird automatisch neu berechnet, wenn Sie task2 ausführen.

Warum ist es langsam?

Es kostet fast die ganze Zeit, Tensorflow zu importieren, es ist groß.

Viel Glück, ich hoffe, dass hilft.

Verwandte Themen