神經層的建立與擬合

2021-08-17 12:27:24 字數 2753 閱讀 2712

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維隱藏...