2016-11-10 35 views
0

在下面的代碼中,我正在寫一個四個循環來打印斐波那契的序列,以練習使用TensorFlow。但是,經過幾次迭代後,它會使數字爲負數,然後返回零。爲什麼?我怎樣才能解決這個問題?如果我使用浮動方式,它工作正常。此外,爲什麼這是如此緩慢相比,一個簡單的算法?在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=',') 

輸出: 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,402653184,805306368,1610612736,-1073741824,-2147483648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,

回答

1

對於您的主要問題:這是計算機如何存儲數字的問題。你在這裏遇到的是一個integer overflow

,數字不適合在變量,Tensorflow並不試圖解決這個問題,因爲這會慢下來(也許你已經習慣了蟒蛇處理這個給你。999**999 FTW)

你變量類型爲int32,因爲這是默認值。 你正在通過tf.int8tf.Variableint8將在128處翻轉,但它落在參數Trainable中。切換到:

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

int64更大。

此外,這不是正確的序列。 這只是前一個元素的兩倍。 sess.run(var12)不會做任何事情(var是一個壞名字,它不是一個變量)。當您運行task2時, var12會自動重新計算。

爲什麼它很慢?

> python fib.py 

它花費幾乎所有的時間導入Tensorflow,它很大。

祝你好運,我希望有所幫助。