欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

利用python和TensorFlow構(gòu)建神經(jīng)網(wǎng)絡(luò)解決二分類問(wèn)題

系統(tǒng) 1765 0

關(guān)于神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的軟件設(shè)計(jì)和分類曲線的繪制,本文主要參考了以下文章:

https://blog.csdn.net/lilong117194/article/details/79130032

構(gòu)建的具體步驟如下:

步驟1. 建立數(shù)據(jù)源(樣本庫(kù))——使用隨機(jī)初始化的方式。由于需要進(jìn)行邏輯分類,需要建立2個(gè)數(shù)據(jù)類,并合并在一起。如下:

num_points=1000? # 樣本數(shù)目

vectors_set=[]

x1_PlotData=[]? # 用于后期繪圖的數(shù)據(jù)

y1_PlotData=[]

x2_PlotData=[]

y2_PlotData=[]

for i in range(int(num_points/2)):

??? x1=np.random.normal(0.0,0.55)?? #橫坐標(biāo),進(jìn)行隨機(jī)高斯處理化,以0為均值,以0.55為標(biāo)準(zhǔn)差

??? y1=x1*0.1+0.3+np.random.normal(-0.03,0.03)?? #縱坐標(biāo),數(shù)據(jù)點(diǎn)在y1=x1*0.1+0.3上小范圍浮動(dòng)

??? vectors_set.append([x1,y1,0])

??? x2 = np.random.normal(0.0, 0.55)

??? y2 = x2 * 0.1 + 0.4 + np.random.normal(-0.03, 0.03)

??? vectors_set.append([x2, y2,1])

??? x1_PlotData.append(x1)

??? y1_PlotData.append(y1)

??? x2_PlotData.append(x2)

??? y2_PlotData.append(y2)

x1_data=[v[0] for v in vectors_set]? # 使用np.mat將list轉(zhuǎn)化為numpy中的矩陣格式

x2_data=[v[1] for v in vectors_set]

y_data=[v[2] for v in vectors_set]

?

步驟2.建立數(shù)據(jù)流圖:新建變量theta(同時(shí)建立正則項(xiàng)),假設(shè)函數(shù)tf.nn.relu ,代價(jià)函數(shù)(同時(shí)添加正則項(xiàng)),優(yōu)化算法選擇梯度下降法,并設(shè)置步長(zhǎng):

def get_weight(shape, lambda1):? # 定義一個(gè)獲取權(quán)重,并自動(dòng)加入正則項(xiàng)到損失的函數(shù)。

??? var = tf.Variable(tf.random_normal(shape), dtype=tf.float32) # 生成一個(gè)變量

??? tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lambda1)(var)) # add_to_collection()函數(shù)將新生成變量的L2正則化損失加入集合losses

??? return var # 返回生成的變量

?

x_input=tf.placeholder(tf.float32,shape=[None,2])? # 定義神經(jīng)網(wǎng)絡(luò)輸入和輸出

y_input=tf.placeholder(tf.float32)

?

layer_dimension = [2,8,1]? # 定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),即各個(gè)層的節(jié)點(diǎn)數(shù)目

n_layers = len(layer_dimension)? # 獲取神經(jīng)網(wǎng)絡(luò)的層數(shù)

cur_layer = x_input? # 這個(gè)變量維護(hù)前向傳播時(shí)最深層的節(jié)點(diǎn),開(kāi)始的時(shí)候就是輸入層

in_dimension = layer_dimension[0]? # 當(dāng)前層的節(jié)點(diǎn)個(gè)數(shù)

?

for i in range(1, n_layers):? # 循環(huán)生成網(wǎng)絡(luò)結(jié)構(gòu)

??? out_dimension = layer_dimension[i] # layer_dimension[i]為下一層的節(jié)點(diǎn)個(gè)數(shù)

??? weight = get_weight([in_dimension, out_dimension], 0.0001)? # 生成當(dāng)前層中權(quán)重的變量

??? bias = tf.Variable(tf.constant(0.1, shape=[out_dimension])) # 偏置

??? cur_layer = tf.nn.relu(tf.matmul(cur_layer, weight) + bias) # 使用Relu激活函數(shù)

??? in_dimension = layer_dimension[i]? # 進(jìn)入下一層之前將下一層的節(jié)點(diǎn)個(gè)數(shù)更新為當(dāng)前節(jié)點(diǎn)個(gè)數(shù)

?

y= cur_layer? # 最后一層的輸出值即是總的輸出值

?

mse_loss = tf.reduce_mean(tf.square(y_input - y)) # 在定義神經(jīng)網(wǎng)絡(luò)前向傳播的同時(shí)已經(jīng)將所有的L2正則化損失加入了圖上的集合,這里是損失函數(shù)的定義。

tf.add_to_collection('losses', mse_loss) # 將均方誤差損失函數(shù)加入損失集合

loss = tf.add_n(tf.get_collection('losses'))? # get_collection()返回一個(gè)列表,這個(gè)列表是所有這個(gè)集合中的元素,在本樣例中這些元素就是損失函數(shù)的不同部分,將他們加起來(lái)就是最終的損失函數(shù)

optimizer = tf.train.GradientDescentOptimizer(0.1)? # 選擇梯度下降法,并設(shè)置步長(zhǎng)。

train_step = optimizer.minimize(loss)

?

步驟3.初始化流圖:

sess = tf.Session()

init = tf.global_variables_initializer()

sess.run(init)

?

步驟4.開(kāi)始訓(xùn)練,同時(shí)記錄訓(xùn)練過(guò)程:

x_plot=[]

y_plot=[]

steps = 2000

for i in range(steps):

??? xs=np.column_stack(( np.mat(x1_data).T,np.mat(x2_data).T))

??? ys = np.mat(y_data).T

??? feed = { x_input: xs, y_input: ys }

??? sess.run(train_step, feed_dict=feed)

??? if i % 100 == 0 :

??????? print("After %d iteration:" % i)

??????? print("Cost: %f" % sess.run(loss, feed_dict=feed))

??????? x_plot.append(i)

??????? y_plot.append(sess.run(loss, feed_dict=feed))

?

步驟5.輸出訓(xùn)練結(jié)果,主要為訓(xùn)練參數(shù)theta和損失值(代價(jià)值):

print("Finnally Result")

print("Loss: %f" % sess.run(loss, feed_dict=feed))

?

步驟6.在樣本集中繪制訓(xùn)練后的分類線(采用繪制等高線的方式),和“訓(xùn)練次數(shù)-損失”曲線,以便觀察訓(xùn)練結(jié)果:

xx,yy= np.mgrid[-2:2:0.1, 0.:0.8:0.02]?

grid = np.c_[xx.ravel(), yy.ravel()]

probs = sess.run(y, feed_dict = { x_input: grid })

probs = probs.reshape(xx.shape)

plt.subplot(1,2,1)

plt.scatter(x1_PlotData,y1_PlotData,c='g')

plt.scatter(x2_PlotData,y2_PlotData,c='r')

plt.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.1)

plt.subplot(1,2,2)

plt.plot(x_plot,y_plot,'-')

plt.show()

?

輸出結(jié)果:

Finnally Result

Loss: 0.055836

輸出圖形:

利用python和TensorFlow構(gòu)建神經(jīng)網(wǎng)絡(luò)解決二分類問(wèn)題_第1張圖片

注:

由于兩類點(diǎn)的互相干擾,如果訓(xùn)練的損失較高,有時(shí)會(huì)無(wú)法繪制出一條較好的等高線??赏ㄟ^(guò)打印步驟6中的probs觀察訓(xùn)練后的輸出結(jié)果進(jìn)行確認(rèn)。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!?。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 成人黄色免费观看 | 亚洲好视频 | 久久99国产精品视频 | 欧美一区二区三区四区五区 | 欧美亚洲综合久久 | 国产一区二区欧美 | 青娱乐极品在线 | 97久久精品一区二区三区观看 | 22eee在线播放成人免费视频 | 色玖玖 | 黄色影片在线免费观看 | 国产成人一区二区三区 | www.精品| 精品欧美一区二区三区精品久久 | 全部免费国产潢色一级 | 婷婷视频网站 | 日本激情在线视频 | 国产成人综合网 | 99精品视频在线在线视频观看 | 国产日韩一区在线精品欧美玲 | 欧美一级毛片欧美大尺度一级毛片 | 欧美99 | 成人免费视频网站在线观看 | 欧美在线精品一区二区在线观看 | 欧美专区视频 | 六月色婷 | av网站在线播放 | 在线观看欧美三级 | 免费看淫片 | 久久精品成人 | 韩国美女一区二区 | jizzjizz日本护士视频 | 精品欧美一区二区精品久久久 | v片在线看 | 久草免费在线观看 | 久久一本日韩精品中文字幕屁孩 | 久久久女 | 欧美18videos极品| 久久dvd| 亚洲欧美无人区乱码 | 99成人|