tensorflow學習2 線性擬合和神經網路擬合

2022-08-20 02:03:15 字數 4554 閱讀 8227

線性擬合的思路:

線性擬合**:

1

import

tensorflow as tf

2import

numpy as np

3import

matplotlib.pyplot as plt4#

%%圖形繪製

5def

data_show(x,y,w,b):

6plt.figure()

7 plt.scatter(x,y,marker='.'

)8 plt.scatter(x,(w*x+b),marker='.'

)9plt.show()10#

%%生成資料

11 x_data=np.random.rand(100).astype(np.float32)

12 y_data=0.1*x_data + 0.313#

%%建立結構

14 weights=tf.variable(tf.random_uniform([1],-1.0,1.0))#

平均分布的隨機數

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

16 y=weights*x_data+biases

17 loss=tf.reduce_mean(tf.square(y-y_data)) #

損失函式,reduce_mean:計算乙個張量的各維度的元素的均值

18 optimizer=tf.train.gradientdescentoptimizer(0.5)#

優化器 學習率選擇#.gradientdescentoptimizer()實現梯度下降演算法的優化器。

19 train=optimizer.minimize(loss)#

優化器優化目標選擇,使loss 最小

20 init=tf.global_variables_initializer() #

初始化全變數節點21#

%%22

###訓練部分

神經網路擬合二次函式(帶雜訊)

**:

import

tensorflow as tf

import

numpy as np

#%%

def add_layer(input,in_size,out_size,activation_function=none):

weights=tf.variable(tf.random_normal([in_size,out_size]))

#tf.random.uniform()均勻分布,tf.random.normal() 正太分布

biases=tf.variable(tf.zeros([1,out_size])+0.1)#

biases 的維度是1行,weights的列

#輸入是1*input,weights是input*output,output是1*output,所以biases是1*output

wx_plus_b=tf.matmul(input,weights)+biases

if activation_function==none:

output=wx_plus_b

else:#

加入啟用函式

output=activation_function(wx_plus_b)

return output#

返回output #%%

x_data= np.linspace(-1,1,300)[:,np.newaxis] #

np.linspace(),-1到1進行300等分的陣列得到1*300,再進行變換為300*1

noise=np.random.normal(0,0.05,x_data.shape)

y_data=np.square(x_data)-0.5+noise#%%

#佔位符,feed_dict={}進行賦值

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

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

ll=add_layer(xs,1,10,activation_function=tf.nn.relu)#

啟用函式是relu

prediction=add_layer(ll,10,1,activation_function=none)

reduce_sum=tf.reduce_sum(tf.square(ys-prediction),reduction_indices=1)

loss=tf.reduce_mean(reduce_sum)

#tf.reduce_sum:計算乙個張量的各個維度的元素之和。

#tf.reduce_mean():取平均值。

train_step=tf.train.gradientdescentoptimizer(0.1).minimize(loss)

init=tf.global_variables_initializer()

with tf.session() as sess:

sess.run(init)

for i in range(1000):

sess.run(train_step,feed_dict=)

#if i % 50 ==0:

#print(sess.run(loss,feed_dict=))

if i==999:

print(sess.run(tf.square(ys - prediction),feed_dict=))

#輸出的是300行1列 [300,1]

#[[ 4.99251783e-02]

#[ 1.65489316e-02]

#..........

#[ 3.05732153e-02]]

#經過,tf.reduce_sum(,reduction_indices=1)後為了:

if i==999:

print(sess.run(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=1), feed_dict=))

#輸出的是1行300列[300]------>[1,2,3,.....]就叫做[300],共計300個元素

#[ 3.73238046e-03 ..... 1.45917088e-02]

補充知識 :1.tf.random.uniform() 符合均勻分布--------tf.random.normal()  符合正太分布2.np.newaxis補充知識

import numpy as np

a=np.array([1,2,3,4,5])#creat a array

b=a[:,np.newaxis]

#a---->[1,2,3,4,5]

#b---->[[1],[2],[3],[4],[5]] 5行1列 (5,1)

c=a[np.newaxis,:]

#c---->[[1,2,3,4,5]]  1行5列 (1,5)

3.特別注意:reduction_indices=[1]可知是指定操作座標軸的函式,即把[300,1]按行求和後拼接為新的陣列,也就是[300]的尺寸

Tensorflow學習筆記2

參考 1 classification分類學習 from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets mnist data one hot true mnist庫是手寫體數...

Tensorflow學習之旅 2

暑假就在接觸tensorflow了,但是一直斷斷續續的,所以現在又開始撿起來繼續學。ps 我用的 源於 大佬寫的很好,我也是跟著他的 在他的 上,寫上 自己的理解。import tensorflow as tf 定義 定義乙個變數,可以理解為 var是在 的命名,而myvar是tensorflow變...

tensorflow學習小記2

乙個完整的神經網路例項 在乙個模擬資料及上訓練神經網路來訓練二分類問題 import tensorflow as tf from numpy.random import randomstate 雖然報錯並不影響使用,這在random中是私有 batch size 8 w1 tf.variable t...