tf簡單例子

2021-08-17 12:50:57 字數 4337 閱讀 7028

y=ax+b(a、b是常量),這是一條非常簡單的數學方程式,有小學基礎的人應該都知道。

我現在有很多的x和y值,所以問題就是如何通過這些x和y值來得到a和b的值?

**test.py如下:

import numpy as np #這是python的一種開源的數值計算擴充套件,非常強大

import tensorflow as tf  #匯入tensorflow

##構造資料##

x_data=np.random.rand(100).astype(np.float32) #隨機生成100個型別為float32的值

y_data=x_data*0.1+0.3  #定義方程式y=x_data*a+b

##-------##

##建立tensorflow神經計算結構##

weight=tf.variable(tf.random_uniform([1],-1.0,1.0))

biases=tf.variable(tf.zeros([1]))     

y=weight*x_data+biases

##-------##

loss=tf.reduce_mean(tf.square(y-y_data))  #判斷與正確值的差距

optimizer=tf.train.gradientdescentoptimizer(0.5) #根據差距進行反向傳播修正引數

train=optimizer.minimize(loss) #建立訓練器

init=tf.global_variables_initializer() #初始化tensorflow訓練結構

sess=tf.session()  #建立tensorflow訓練會話

sess.run(init)     #將訓練結構裝載到會話中

for  step in range(400): #迴圈訓練400次

sess.run(train)  #使用訓練器根據訓練結構進行訓練

if  step%20==0:  #每20次列印一次訓練結果

print(step,sess.run(weight),sess.run(biases)) #訓練次數,a值,b值

執行pyhton  1.py,結果如下:

0 [0.53761494] [0.09637235]

20 [0.1971053] [0.25049835]

40 [0.12194208] [0.28881454]

60 [0.10495806] [0.29747254]

80 [0.10112034] [0.2994289]

100 [0.10025313] [0.29987097]

120 [0.10005721] [0.29997087]

140 [0.10001294] [0.29999343]

160 [0.10000292] [0.29999852]

180 [0.10000066] [0.29999968]

200 [0.10000016] [0.29999992]

220 [0.10000011] [0.29999995]

240 [0.10000011] [0.29999995]

260 [0.10000011] [0.29999995]

280 [0.10000011] [0.29999995]

300 [0.10000011] [0.29999995]

320 [0.10000011] [0.29999995]

340 [0.10000011] [0.29999995]

360 [0.10000011] [0.29999995]

380 [0.10000011] [0.29999995]

解釋:tf.reduce_max,tf.reduce_mean

求最大值tf.reduce_max(input_tensor, reduction_indices=none, keep_dims=false, name=none)

求平均值tf.reduce_mean(input_tensor, reduction_indices=none, keep_dims=false, name=none)

引數1--input_tensor:待求值的tensor。

引數2--reduction_indices:在哪一維上求解。

引數(3)(4)可忽略

# 'x' is [[1., 2.]

#         [3., 4.]]

x是乙個2維陣列,分別呼叫reduce_*函式如下:

首先求平均值:

tf.reduce_mean(x) ==> 2.5 #如果不指定第二個引數,那麼就在所有的元素中取平均值

tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二個引數為0,則第一維的元素取平均值,即每一列求平均值

tf.reduce_mean(x, 1) ==> [1.5,  3.5] #指定第二個引數為1,則第二維的元素取平均值,即每一行求平均值

class tf.train.gradientdescentoptimizer

使用梯度下降演算法的optimizer,還有其它的演算法,如:class tf.train.adadeltaoptimizer使用adadelta演算法的optimizer,class tf.train.adagradoptimizer使用adagrad演算法的optimizer,class tf.train.momentumoptimizer使用momentum演算法的optimizer,class tf.train.adamoptimizer使用adam 演算法的optimizer,class tf.train.ftrloptimizer使用ftrl 演算法的optimizer,class tf.train.rmspropoptimizer使用rmsprop演算法的optimizer。

_init__(learning_rate, use_locking=false,name=』gradientdescent』)

作用:建立乙個梯度下降優化器物件

引數:learning_rate: a tensor or a floating point value. 要使用的學習率

use_locking: 要是true的話,就對於更新操作(update operations.)使用鎖

name: 名字,可選,預設是」gradientdescent」.

optimizer.minimize

然後,可以設定 乙個用於記錄全域性訓練步驟的單值。以及使用minimize()操作,該操作不僅可以優化更新訓練的模型引數,也可以為全域性步驟(global step)計數。與其他tensorflow操作類似,這些訓練操作都需要在tf.session會話中進行

tf.random_uniform

tf.random_uniform((4, 4), minval=low,maxval=high,dtype=tf.float32)))返回4*4的矩陣,產生於low和high之間,產生的值是均勻分布的。例:

import tensorflow as tf

import numpy as np

with tf.session() as sess:

print(sess.run(tf.random_uniform(

(4, 4), minval=-0.5,

maxval=0.5,dtype=tf.float32)))

輸出:[[ 0.23706067  0.42579055  0.16444612  0.12134457]

[ 0.14245582  0.32224071 -0.3107301   0.29911542]

[-0.03472292 -0.37411058 -0.22680879  0.21656895]

[-0.37798405  0.31725729 -0.17690742 -0.02995324]]

tf.zeros

建立乙個所有的引數為0的tensor物件, tf.zeros(shape, dtype=tf.float32, name=none)

引數:shape: 用於表示維度,通常為乙個int32型別陣列,或者乙個一維(1-d)的tf.int32數字.注意不能直接使用數字

dtype: 所要建立的tensor物件的資料型別

name: 乙個該操作的別名(可選的).

data = tf.zeros([8], dtype=tf.float16)

p.printvalue("sess.zeros([1], dtype=tf.float16)", data)

輸出:# sess.zeros([1], dtype=tf.float16) : tensor("zeros_3:0", shape=(8,), dtype=float16) -

[ 0.  0.  0.  0.  0.  0.  0.  0.]

簡單委託例子

例子1 using system using system.collections.generic using system.text 例子2 using system using system.collections.generic using system.text namespace 介面 c...

Pro C 簡單例子

include exec sql begin declare section char userid 11 hr oracle char std name 10 int std number int dept number exec sql end declare section char temp...

TabLayout簡單例子

要生成乙個tab ui需要用到兩個類,乙個是tabhost,乙個是tabwidget.tabwidget是用來顯示標籤欄的,內嵌在tabhost裡面。首先建立以tabhost為根節點的xml布局檔案 生成三個對應於標籤內容的activity pictureactivity public class ...