2 8 使用Tensorflow實現簡單機器學習

2021-10-14 03:06:25 字數 2767 閱讀 1630

前面我們介紹了使用numpy和pytorch實現簡單的回歸分析任務,這次我們使用tensorflow來實現相同的任務。我們使用tensorflow1.0版本的,使用靜態圖。**如下:

# 1、導入庫及生成訓練資料

import tensorflow as tf

import numpy as np

from matplotlib import pyplot as plt

# 生成訓練資料

np.random.seed(

100)

x = np.linspace(-1

,1,100

).reshape(

100,1)

y =3

* np.power(x,2)

+2+0.2

* np.random.rand(x.size)

.reshape(

100,1)

# 2、初始化引數

# 建立兩個佔位符,分別用來存放輸入資料x和目標值y

# 執行計算圖時,匯入資料

x1 = tf.placeholder(tf.float32, shape=

(none,1

))y1 = tf.placeholder(tf.float32, shape=

(none,1

))# 建立權重變數w和b,並用隨機值初始化

# tesnorflow的變數在整個計算圖儲存其值

w = tf.variable(tf.random_uniform([1

],0,

1.0)

)b = tf.variable(tf.zeros([1

]))# 3、實現前向傳播及損失函式

# 前向傳播,計算**值

y_pred = np.power(x1,2)

* w + b

# 計算損失值

loss = tf.reduce_mean(tf.square(y-y_pred)

)# 計算有關引數w、b關於損失函式的梯度

grad_w, grad_b = tf.gradients(loss,

[w, b]

)# 用梯度下降法更新引數

# 執行計算圖時給new_w1和new_b1賦值

# 對tensorflow來說,更新引數是計算圖的一部分

# 而pytorch,這部分屬於計算圖之外

learning_rate =

0.01

new_w = w.assign(w - learning_rate * grad_w)

new_b = b.assign(b - learning_rate * grad_b)

# 初始化所有變數

init = tf.global_variables_initializer(

)# 4、訓練模型

# 已構建計算圖,接下來建立會話來執行計算圖

with tf.session(

)as sess:

sess.run(init)

for step in

range

(2000):

# 迴圈執行計算圖,需要把x1,y1賦給x和y

# 每次執行計算圖,需要計算關於new_w和new_b的損失值

# 返回numpy多維陣列

loss_value, v_w, v_b = sess.run(

[loss, new_w, new_b]

, feed_dict=

)if step %

200==0:

print

("第{}次迭代,損失值、權重、偏移量分別為,{},{}"

.format

(step, loss_value, v_w, v_b)

)# 5、視覺化結果

plt.figure(

)plt.scatter(x, y)

plt.plot(x, v_b + v_w*x**2)

第0次迭代,損失值、權重、偏移量分別為8.2285,[

0.9523836

],[0.05597141

]第200次迭代,損失值、權重、偏移量分別為0.0660,[

2.170021

],[2.3723235

]第400次迭代,損失值、權重、偏移量分別為0.0353,[

2.4069746

],[2.3136168

]第600次迭代,損失值、權重、偏移量分別為0.0199,[

2.570806

],[2.253223

]第800次迭代,損失值、權重、偏移量分別為0.0119,[

2.6886544

],[2.2095635

]第1000次迭代,損失值、權重、偏移量分別為0.0078,[

2.7734795

],[2.1781359

]第1200次迭代,損失值、權重、偏移量分別為0.0056,[

2.834531

],[2.155516

]第1400次迭代,損失值、權重、偏移量分別為0.0045,[

2.8784747

],[2.139235

]第1600次迭代,損失值、權重、偏移量分別為0.0040,[

2.9101052

],[2.127516

]第1800次迭代,損失值、權重、偏移量分別為0.0037,[

2.9328716

],[2.119081

]

TensorFlow2 0教程28 自動求導

這節我們會介紹使用tensorflow2自動求導的方法。一 gradient tapes tensorflow 提供tf.gradienttape api來實現自動求導功能。只要在tf.gradienttape 上下文中執行的操作,都會被記錄與 tape 中,然後tensorflow使用反向自動微分...

NLP入門例項推薦(Tensorflow實現)

mnist nn mnist cnn text classification cnn 專案 tensorflow例項 cnn處理句子相似度 multi perspective sentence similarity modeling with convolutional neural network...

syncbn在TensorFlow中的實現

在syncbn之前我們先簡單介紹一下bn層以及多卡機制 bn層介紹 bn層中有兩個可訓練引數 beta,gamma 以及兩個統計引數 moving mean,moving variance 訓練過程和測試過程,bn層計算方式是不同的。訓練過程,beta和gamma與卷積層中的weight是一樣參與訓...