寒假學習日報(二)
阿新 • • 發佈:2021-01-11
今日把執行環境完善了一些,hadoop分散式還沒有做,之後就去學習tensorflow了。
我下載的tensorflow版本是2.3.0,老師下發的視訊演示的是1.0版本的,因此在寫程式碼時要注意方法的呼叫,我查了一些資料得知2.0版本的tensorflow較於1.0版本改了很多東西,因此在使用1.0版本的方法時需要寫下如下程式碼:
import tensorflow as tf #此行程式碼不加會報TypeError錯誤,原因為已安裝的tensorflow版本為2.3,下列實驗程式碼對應的版本為1.幾版本 tf.compat.v1.disable_eager_execution()
補上這個程式碼之後,後續的程式碼在使用方法時都需要補上【compat.v1.】如tf.Session()在1.0版本可用,而2.0版本已經沒有這個方法了,因此在使用時應該這麼寫
tf.compat.v1.Session()
搞清楚版本差別之後,今日跟著視訊學習了使用tensorflow實現簡單的線性迴歸模型構造,下面給出程式碼和實現效果:
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt #隨機生成1000點,圍繞直線:y=0.1x+0.3 tf.compat.v1.disable_eager_execution() num_points=1000 vectors_set=[] for i in range(num_points): x1=np.random.normal(0.0, 0.55) y1=x1*0.1+0.3+np.random.normal(0.0, 0.03) vectors_set.append([x1, y1]) #生成樣本 x_data = [v[0] for v in vectors_set] y_data = [v[1] for v in vectors_set] plt.scatter(x_data,y_data,c='r')
#生成1維的W矩陣,取值是[-1,1]之間的隨機數 W=tf.Variable(tf.compat.v1.random_uniform([1], -1.0, 1.0), name='W') #生成1維的b矩陣,初始值是0 b=tf.Variable(tf.zeros([1]), name='b') #經過計算得出預估值y y = W*x_data+b #以預估值y和實際值y_data之間的均方誤差作為損失 loss=tf.reduce_mean(tf.square(y - y_data), name='loss') #採用梯度下降法來優化引數 optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5) #訓練的過程就是最小化這個誤差值 train=optimizer.minimize(loss, name='train') sess=tf.compat.v1.Session() init=tf.compat.v1.global_variables_initializer() sess.run(init) #輸出初始化的W,b print("W=", sess.run(W),"b=",sess.run(b),"loss=",sess.run(loss)) #執行20次訓練 for step in range(20): sess.run(train) print("W=", sess.run(W),"b=",sess.run(b),"loss=",sess.run(loss))
plt.scatter(x_data,y_data,c='r') plt.plot(x_data,sess.run(W)*x_data+sess.run(b)) plt.show()
可見訓練出來的W和b越來越接近0.1和0.3。
在學習tensorflow的過程中,有些函式的使用與numpy類似,因此比較容易理解,後續需要訓練更復雜的模型,因此需要一定的數學基礎。
此外今日還看了一些Spark的概念,由於它可以在Hadoop檔案系統中並行執行,由於分散式hadoop未能完全搭建,因此沒有進行實踐。
最後就是今天的一些疑難點,與tensorflow和spark無關,主要是在安裝idea的時候出現了問題,總是出錯,前前後後嘗試了7-8次,最後成功安裝了2019.3.3版本,同時將maven庫路徑之類的調整了一下,大部分時間也都浪費在了這裡。
明日目標:hadoop分散式搭建,Spark安裝並實踐,tensorflow學習。