TensorFlow 使用樣本進行求解平方根

2021-10-07 05:54:47 字數 3647 閱讀 4749

之前用的是使用迭代進行直接的求解

但是深度學習最常用的方法是:根據樣本學習

之間的解法是求解arg

minf

(x)argminf(x)

argmin

f(x)

目前的解法是求解arg

minf

(x,p

)argminf(x,p)

argmin

f(x,

p)求的值是p,而不是x

p就是要優化的東西

通過樣本來查詢規律,然後**平方根

**實現如下

定義主方法類

if __name__ ==

"__main__":)

ys = np.array(

[e for e in

range(-

100,

100)])

/100

xs = np.square(ys)

) pl.plot(xs, ys)

xs = np.random.uniform(0,

2,[400])

pl.plot(xs, ys)

)

class

:def

__init__

(self)

:pass

deftrain

(self, xs, ys, lr =

0.01

, epoches =

2000):

pass

defsqrt

(self,n)

:pass

defclose

(self)

:pass

定義輸入和輸出的值

def

__init__

(self)

:# 樣本的數量不確定用-1來表示,長度為1個:[-1, 1]。但是在tensorflow中[-1]會有問題,一般使用none表示

x = tf.placeholder(tf.float32,

[none],

'x')

# x指求平方根的數,而不是需要放進去平方根的變數

self.x = x # 對x進行儲存

x = tf.reshape(x,[-

1,1]

)# 將輸入的一維轉換成向量

# 進行全連線操作(利用多項式來和矩陣進行相乘)多項式是乙個係數矩陣

w = tf.get_variable(

'w',[1

,200

], tf.float32)

# 定義乙個係數矩陣,矩陣的名字為w。用引數w來儲存平方根的規律,需要優化的也是w這個引數

b = tf.get_variable(

'b',

[200

], tf.float32)

x = tf.matmul(x,w)

+ b # 全連線的最終結果,其中b是乙個偏值(多項式變換的乙個常規的做法)

# x 得到的形狀是:[-1, 200], w 和 b是可以相乘的

# 最後使用啟用函式

x = tf.relu(x)

# relu(x) === maximum(x,0) 後面我會解釋為啥用啟用函式

# 再定義一對矩陣和偏值

w = tf.get_variable(

'w2',[

200,1]

, tf.float32)

# 因為獲得的x是[-1,200],所以w的維度應該是[200,1]

b = tf.get_variable(

'b2',[

200]

, tf.float32)

self.y_predict = tf.matmul(x, w)

+ b # [-1 , 1] # 為最終的結果進行儲存(我們所希望的平方根)

# 這個y是你的**值,而不是輸入的樣本x的值

self.y_predict = tf.reshape(self.y_predict,[-

1])# 將二維矩陣轉換成一維的向量

# 把輸入的標籤也傳入進來

self.y = tf.placeholder(tf.float32,

[none],

'y')

loss = tf.reduce_mean(tf.square(self.y - self.y_predict)

)# 求損失函式

self.lr = tf.placeholder(tf.float32,

[none],

'lr'

)# lr s

opt = tf.train.adanoptimizer(lr)

# 定義梯度下降優化器

self.train_op = opt.minmize(loss)

# 訓練操作(控制輸入輸出的優化操作)

self.session = tf.session(

) self.session.run(tf.global_variables_initalizer())

# 初始化方法中的所有變數

過程如下:

模型優化主要就是優化:w、b、w2、b2這四個引數

為了達到這目的,這個模型需要進行兩個階段使用

訓練多次,使用就一次,所以我們需要有乙個訓練操作

def

train

(self, xs, ys, lr =

0.01

, epoches =

2000):

for _ in

range

(epoches)

: self.session.run(self.train_op,

)# 對三個引數進行優化

正常來講,lr和epoches是放在sqrt方法中的,就是因為需要分開使用所以將引數放在train函式中了

張量全部可以通過self進行獲取

三個輸入張量:x、y、lr

乙個輸出張量:y_predict

乙個訓練張量:train_op

def

close

(self)

: self.session.close(

)

def

sqrt

(self,n)

: ys = self.session.run(self.y_predict,

)# 執行y_predict

return ys

執行的結果如下:

題外話:為什麼session在建構函式中定義,而不是在train中定義的?

如果定義在train中,如果train結束了,那麼session也就結束了,變數的載入也就結束了。

在乙個方法裡面,不管是成員方法還是全域性方法,原則上,**的數量應該少。所以我們可以定義乙個tensors類來包含建構函式中的方法。

使用TensorFlow低階別的API進行程式設計

tensorflow的低階api要使用張量 tensor 圖 graph 會話 session 等來進行程式設計。雖然從一定程度上來看使用低階的api非常的繁重,但是它能夠幫助我們更好的理解tensorflow的,更加靈活的控制訓練的過程。程式的構建分為兩個步驟,第乙個步驟是圖的構建,第二個步驟是會...

Tensorflow基本使用

使用 tensorflow,你必須明白 tensorflow tensorflow 是乙個程式設計系統,使用圖來表示計算任務.圖中的節點被稱之為 op operation 的縮寫 乙個 op 獲得 0 個或多個tensor,執行計算,產生 0 個或多個tensor.每個 tensor 是乙個型別化的...

WPF使用IDataErrorInfo進行資料校驗

原文 wpf使用idataerrorinfo進行資料校驗 這篇部落格將介紹如何使用idataerrorinfo進行資料校驗。下面直接看例子。乙個customer類,兩個屬性 firstname,age class customer public intage 將customer類繼承idataerr...