深度學習框架Tensorflow學習(六)-----小錯誤引來的反思

今天閒來無聊寫了一個簡單構建簡單神經網絡的例子,代碼如下:

import tensorflow as tf
import numpy as np
def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights = tf.Variable(tf.random_normal([in_size,out_size]))
    biases = tf.Variable(tf.zeros([1, out_size])+0.1)
    Wx_plus_b = tf.matmul(inputs,Weights)+biases

    if activation_function==None:
        outputs=Wx_plus_b
    else:
        outputs=activation_function(Wx_plus_b)
    return outputs

x_data =np.linspace(-1,1,300,dtype='float32')[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data =np.square(x_data)-0.5+noise

xs=tf.placeholder(tf.float32,[None,1])
ys=tf.placeholder(tf.float32,[None,1])

l1 = add_layer(x_data,1,10,activation_function=tf.nn.relu)
prediction = add_layer(l1,10,1,activation_function=None)

loss = tf.reduce_mean(tf.reduce_sum(tf.square(y_data-prediction),reduction_indices=[1]))
train_step=tf.train.GradientDescentOptimizer(0.01).minimize(loss)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if i%50==0:
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

大家注意這一行,x_data =np.linspace(-1,1,300,dtype='float32')[:,np.newaxis]
在一開始的時候,我沒有定義x_data的dtype,但是就一直報錯,我都沒找到爲什麼報錯,就是報數據類型不對,經過調試發現,x_data生成的數據類型爲float64,而我們在其他地方定義的數據類型都是float32,因爲這個不匹配,這個就引起我的反思了,我就查找資料,決定找到這個問題的根源所在,測地解決數據類型的錯誤。
在這個幫助文檔中np.linspace中有說明,
dtype : dtype, optional
The type of the output array. If dtype is not given, infer the data type from the other input arguments.

**如果沒有給定數據類型,返回數據的數據類型根據其他輸入參數的數據類型來判斷。

————————————————————————————————————
暫時未找到具體的定義說明參數定義是根據哪個輸入來定義,建議同學們在使用時對變量進行定義的時候把數據類型參數給定義了,這樣不會引起不必要的錯誤,有什麼更新的知識能夠解答這個問題我會繼續在這邊補充出來,歡迎大家隨時關注。

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