import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
初始化神經層,輸入x資料、行、列與激勵函式
得到的相當於乙個擬合程度陳差距的
激勵函式是為了得到的曲線更加彎曲而不是由直線組成。
tf最好由32位浮點數組成
tf.zeros(row,culomn)為建立為0的矩陣
def add_layer(inputs,in_size,out_size,activation_function=none):
#輸入4個變數,資料,行數,列數,是否有激勵函式
weights = tf.variable(tf.random_normal([in_size,out_size]))
#定義權值w,並且可以設定為32位的浮點數,dtype=tf.float64
bases = tf.variable(tf.zeros([1,out_size])+0.1)
#建立1行n列的變數
wx_plus_b = tf.matmul(inputs,weights)+bases
#相乘得到乙個隨機的w的神經層
if activation_function is none:
outputs = wx_plus_b
else:
outputs = activation_function(wx_plus_b)
return outputs
np.linspace(-1,1,300)為建立從-1到1的三百個大約等差的數字
np.random.normal為建立乙個正太分布
x_data = np.linspace(-1,1,300)[:,np.newaxis]
#建300個(-1,1)的等差資料
#print(x_data)
noise = np.random.normal(0,0.05,x_data.shape)
#第乙個引數表示概率分布的均值,也就是中心centre,第二個為標準差,
#越小,那麼高度越高,第三個為數量
#print(noise)
#存在噪點,方差為0.05,格式與xdata一樣
y_data = np.square(x_data)-0.5+noise
#np.sqrt(x) 計算陣列各元素的平方根 np.square(x) 計算陣列各元素的平方
xs = tf.placeholder(tf.float32,[none,1]) #不論多少個例子都ok,佔位符
ys = tf.placeholder(tf.float32,[none,1])
#第乙個引數定義型別是必須的,這個是用作建立再session中傳入值的函式,建立乙個未知大小的矩陣
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
#tf給的激勵方程,通常用這個,啟用操作提供了在神經網路中使用的不同型別的非線性模型
#不使用激勵函式的話,神經網路的每層都只是做線性變換,多層輸入疊加後也還是線性變換。
#因為線性模型的表達能力不夠,激勵函式可以引入非線性因素
prediction = add_layer(l1,10,1,activation_function=none)
#prediction與y_data的差值,損失函式
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),
reduction_indices=[1]))
#tf.reduce_sum是按緯度求和的辦法,reduction_indices=[1]表示按行求和
train_step = tf.train.gradientdescentoptimizer(0.1).minimize(loss)
#tf中有不少為損失函式計算梯度的方法
#以0.1的效率去減少誤差,用梯度下降法最小化loss
init = tf.global_variables_initializer()
sess = tf.session()
sess.run(init)
fig = plt.figure()
#生成乙個框
ax = fig.add_subplot(1,1,1)
#建立乙個子圖,三個引數分別為,子圖總行數,子圖總列數,子圖位置
ax.scatter(x_data,y_data)
#繪製散點圖
plt.ion()
#讓程式不暫停
#plt.show()
#只能輸出一次,把整個程式暫停
for i in range(10000): #最小化損失函式
#training
sess.run(train_step,feed_dict=)
if i % 50 ==0:
try:
ax.lines.remove(lines[0])
except exception:
pass
prediction_value = sess.run(prediction,feed_dict=)
lines = ax.plot(x_data,prediction_value,'r-',lw=5)
plt.pause(0.1)
#plt.show()
#print(sess.run(loss,feed_dict=))
多層神經網路的線性與擬合問題
什麼是正則化?所謂的正則化,就是在神經網路計算損失值的過程中,在損失後面再加一項。這樣損失值所代表的輸出與標準結果間的誤差就會受到干擾,導致學習引數w和b無法按照目標方向來調整,實現模型無法與樣本完全擬合的結果,從而達到防止過擬合的效果。如何新增干擾項呢?干擾項一定有這樣的特性。由此引入了兩個範數l...
使用帶隱藏層的神經網路擬合異或操作
一 介紹 多層神經網路非常好理解,就是在輸入和輸出中間多加些神經元,每一層可以加多個,也可加很多層。下面通過乙個例子將異或資料進行分類。二 例項描述 通過構建異或規律的資料集作為模擬樣本,構建乙個簡單的多層神經網路來擬合其樣本特徵完成分類任務。1 異或規則 當兩個數相同時,輸出為0,不相同時輸出為1...
使用帶隱含層的神經網路擬合異或操作
例項描述 通過構建符合異或規律的資料集作為模擬樣本,構建乙個簡單的多層神經網路來擬合其樣本特徵完成分類任務。1.資料集介紹 所謂的 異或資料 是 於異或操作。2.網路模型介紹 3.完整 import tensorflow as tf import numpy as np 網路結構 2維輸入 2維隱藏...