0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用TensorFlow寫(xiě)個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)

lviY_AI_shequ ? 來(lái)源:未知 ? 作者:鄧佳佳 ? 2018-03-23 15:37 ? 次閱讀

這次就用TensorFlow寫(xiě)個(gè)神經(jīng)網(wǎng)絡(luò),這個(gè)神經(jīng)網(wǎng)絡(luò)寫(xiě)的很簡(jiǎn)單,就三種層,輸入層--隱藏層----輸出層;

首先導(dǎo)入我們要使用的包

# -*- coding: utf-8 -*-import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npimport matplotlibfrom sklearn import datasetsfrom matplotlib.font_manager import FontProperties

然后在設(shè)定一下我們畫(huà)圖的時(shí)候要顯示中文的字體,因?yàn)?a href="http://www.ttokpm.com/tags/python/" target="_blank">Python自帶的不支持中文的解釋

#設(shè)置中文font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)zhfont1 = matplotlib.font_manager.FontProperties(fname=r'c:\windows\fonts\simsun.ttc')

定義一個(gè)會(huì)話,因?yàn)閳D是必須在會(huì)話中啟動(dòng)的

#定義一個(gè)圖會(huì)話sess=tf.Session()

這里我選用公開(kāi)的數(shù)據(jù)鶯尾花的數(shù)據(jù)集,這個(gè)數(shù)據(jù)集雖然都被大家 玩爛了,不過(guò)這個(gè)是一個(gè)學(xué)習(xí)代碼,就不計(jì)較那么多了;

#鶯尾花數(shù)據(jù)集iris=datasets.load_iris()x_vals=np.array([x[0:3] for x in iris.data])y_vals=np.array([x[3] for x in iris.data])

這里設(shè)置一個(gè)隨機(jī)種子,為了可以讓大家把結(jié)果復(fù)現(xiàn)出來(lái)

#設(shè)置一個(gè)種子求結(jié)果seed=211tf.set_random_seed(seed)8np.random.seed(seed)

開(kāi)始有模有樣的劃分?jǐn)?shù)據(jù)集了,一個(gè)是訓(xùn)練集,一個(gè)是測(cè)試集,訓(xùn)練集占80%,測(cè)試集占20%

#劃分測(cè)試機(jī)和訓(xùn)練集train_indices=np.random.choice(len(x_vals),round(len(x_vals)*0.8),replace=True)test_indices=np.array(list(set(range(len(x_vals)))-set(train_indices)))x_vals_train=x_vals[train_indices]x_vals_test = x_vals[test_indices]y_vals_train = y_vals[train_indices]y_vals_test = y_vals[test_indices]

在這里我們?cè)趯⑻卣鬟M(jìn)行一個(gè)歸一化,也就是將數(shù)值型特征全部都轉(zhuǎn)換為0-1之間的數(shù)值,用特征最大距離作為分母;還有一些其他的標(biāo)準(zhǔn)化方法,有興趣可以了解,這個(gè)好處就是能夠讓迭代更加快速,還有就是消除量綱,就是單位之間影響;

使用nan_to_num這個(gè)函數(shù)主要是為了消除None值帶來(lái)的計(jì)算影響

#歸一化函數(shù)def normalize_cols(m): col_max = m.max(axis=0) col_min = m.min(axis=0) return (m - col_min) / (col_max - col_min)#數(shù)據(jù)歸一化并轉(zhuǎn)空集x_vals_train=np.nan_to_num(normalize_cols(x_vals_train))x_vals_test=np.nan_to_num(normalize_cols(x_vals_test))

好了,上面已經(jīng)生成了我們想要的數(shù)據(jù)集;在這里我們?cè)谠O(shè)置一次訓(xùn)練的數(shù)據(jù)集多大,一般是選擇2^N倍數(shù),因?yàn)槭怯?jì)算機(jī)是二進(jìn)制存儲(chǔ),這樣就快,這里我就隨意選擇了個(gè)25,因?yàn)閿?shù)據(jù)集比較小,沒(méi)什么影響

batch_size=25

在這里定義一下訓(xùn)練變量Y和X,順便設(shè)置為浮點(diǎn)類型

x_data=tf.placeholder(shape=[None,3],dtype=tf.float32)y_target=tf.placeholder(shape=[None,1],dtype=tf.float32)

在這里我們?cè)O(shè)置一下隱藏層連接數(shù)

#設(shè)置隱藏層hidden_layer_nodes=5

開(kāi)始定義各層的參數(shù)變量,因?yàn)檩斎胱兞渴侨齻€(gè)

#定義各層變量,初始變量為3個(gè)A1=tf.Variable(tf.random_normal(shape=[3,hidden_layer_nodes]))b1=tf.Variable(tf.random_normal(shape=[hidden_layer_nodes]))A2=tf.Variable(tf.random_normal(shape=[hidden_layer_nodes,1]))b2=tf.Variable(tf.random_normal(shape=[1]))

這里我們使用relu函數(shù)作為激活函數(shù),以及輸出結(jié)果也使用relu函數(shù)

#定義隱藏層的輸出和輸出層的輸出hidden_output=tf.nn.relu(tf.add(tf.matmul(x_data,A1),b1))final_output = tf.nn.relu(tf.add(tf.matmul(hidden_output, A2),b2))

這里我們?cè)诙x一下?lián)p失函數(shù),有用最大似然估計(jì)的,這里我們使用均方誤差方式

loss=tf.reduce_mean(tf.square(y_target-final_output))

定義一下參數(shù)的更新方式和學(xué)習(xí)速率,這里我們使用梯度下降方法更新,下一次我們講解用其他方式更新,和學(xué)習(xí)速率隨著迭代次數(shù)減少,tfboys就是那么任性

#聲明算法初始變量opt=tf.train.GradientDescentOptimizer(0.005)train_step=opt.minimize(loss)#變量進(jìn)行初始化init=tf.initialize_all_variables()sess.run(init)

定義兩個(gè)list,用來(lái)存放在訓(xùn)練中的測(cè)試集和訓(xùn)練集的誤差

#訓(xùn)練過(guò)程loss_vec=[]test_loss=[]

開(kāi)始迭代,這里我們?cè)O(shè)置迭代次數(shù)為5000

for i in range(5000): #選取batch_size大小的數(shù)據(jù)集 rand_index=np.random.choice(len(x_vals_train),size=batch_size) #選取出數(shù)據(jù)集 rand_x=x_vals_train[rand_index] rand_y=np.transpose([y_vals_train[rand_index]]) #開(kāi)始訓(xùn)練步驟 sess.run(train_step,feed_dict={x_data:rand_x,y_target:rand_y}) #保存損失結(jié)果 temp_loss=sess.run(loss,feed_dict={x_data:rand_x,y_target:rand_y}) #保存損失函數(shù) loss_vec.append(np.sqrt(temp_loss)) test_temp_loss = sess.run(loss, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])}) test_loss.append(np.sqrt(test_temp_loss)) #打印損失函數(shù),沒(méi)五十次打印一次 if (i+1)%50==0: print('Generation: ' + str(i + 1) + '. Train_Loss = ' + str(temp_loss)+ '. test_Loss = ' + str(test_temp_loss))

迭代最后結(jié)果為

接下來(lái)我們?cè)诳纯凑`差隨著迭代變化的趨勢(shì),下降的還不夠快,這些代碼其實(shí)還是很粗糙,太多地方需要優(yōu)化了;下次在寫(xiě)個(gè)優(yōu)化版本的

#畫(huà)圖plt.plot(loss_vec, '', label='訓(xùn)練 Loss')plt.plot(test_loss, 'r--', label='測(cè)試 Loss')plt.title('均方誤差分布', fontproperties=font)plt.xlabel('迭代步數(shù)', fontproperties=font)plt.ylabel('Loss')plt.legend(prop=zhfont1)plt.show()

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:用TensorFlow寫(xiě)個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TF之CNN:Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN的嘻嘻哈哈事之詳細(xì)攻略

    TF之CNN:Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)CNN的嘻嘻哈哈事之詳細(xì)攻略
    發(fā)表于 12-19 17:03

    【PYNQ-Z2試用體驗(yàn)】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    能在外界信息的基礎(chǔ)上改變內(nèi)部結(jié)構(gòu),是一種自適應(yīng)系統(tǒng),通俗的講就是具備學(xué)習(xí)功能?,F(xiàn)代神經(jīng)網(wǎng)絡(luò)是一種非線性統(tǒng)計(jì)性數(shù)據(jù)建模工具。簡(jiǎn)單來(lái)說(shuō),就是給定輸入,神經(jīng)網(wǎng)絡(luò)經(jīng)過(guò)一系列計(jì)算之后,輸出最終結(jié)果。這好比人的大腦
    發(fā)表于 03-03 22:10

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    元,它決定了該輸入向量在地位空間中的位置。SOM神經(jīng)網(wǎng)絡(luò)訓(xùn)練的目的就是為每個(gè)輸出層神經(jīng)元找到合適的權(quán)向量,以達(dá)到保持拓?fù)浣Y(jié)構(gòu)的目的。SOM的訓(xùn)練過(guò)程其實(shí)很簡(jiǎn)單,就是接收到一個(gè)訓(xùn)練樣本后,每個(gè)輸出層
    發(fā)表于 07-21 04:30

    簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)

    簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 09-11 11:57

    【AI學(xué)習(xí)】第3篇--人工神經(jīng)網(wǎng)絡(luò)

    `本篇主要介紹:人工神經(jīng)網(wǎng)絡(luò)的起源、簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)模型、更多神經(jīng)網(wǎng)絡(luò)模型、機(jī)器學(xué)習(xí)的步驟:訓(xùn)練與預(yù)測(cè)、訓(xùn)練的兩階段:正向推演與反向傳播、以Tensor
    發(fā)表于 11-05 17:48

    什么是LSTM神經(jīng)網(wǎng)絡(luò)

    簡(jiǎn)單理解LSTM神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 01-28 07:16

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測(cè)的計(jì)算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預(yù)測(cè)
    發(fā)表于 07-12 08:02

    如何使用TensorFlow神經(jīng)網(wǎng)絡(luò)模型部署到移動(dòng)或嵌入式設(shè)備上

    有很多方法可以將經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型部署到移動(dòng)或嵌入式設(shè)備上。不同的框架在各種平臺(tái)上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    發(fā)表于 08-02 06:43

    如何使用Numpy搭建神經(jīng)網(wǎng)絡(luò)

    很多同學(xué)入門(mén)機(jī)器學(xué)習(xí)之后,直接TensorFlow調(diào)包實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),對(duì)于神經(jīng)網(wǎng)絡(luò)內(nèi)在機(jī)理知之甚少。
    的頭像 發(fā)表于 05-18 11:02 ?3508次閱讀
    如何使用Numpy搭建<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    谷歌正式發(fā)布TensorFlow神經(jīng)網(wǎng)絡(luò)

    日前,我們很高興發(fā)布了 TensorFlow神經(jīng)網(wǎng)絡(luò) (Graph Neural Networks, GNNs),此庫(kù)可以幫助開(kāi)發(fā)者利用 TensorFlow 輕松處理圖結(jié)構(gòu)化數(shù)據(jù)。
    的頭像 發(fā)表于 01-05 13:44 ?1418次閱讀

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理1

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺(jué)得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過(guò)
    的頭像 發(fā)表于 02-27 15:05 ?586次閱讀
    <b class='flag-5'>用</b>Python從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來(lái)理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理1

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理2

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺(jué)得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過(guò)
    的頭像 發(fā)表于 02-27 15:06 ?525次閱讀
    <b class='flag-5'>用</b>Python從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來(lái)理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理2

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理3

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺(jué)得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過(guò)
    的頭像 發(fā)表于 02-27 15:06 ?617次閱讀
    <b class='flag-5'>用</b>Python從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來(lái)理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理3

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理4

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺(jué)得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過(guò)
    的頭像 發(fā)表于 02-27 15:06 ?590次閱讀
    <b class='flag-5'>用</b>Python從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來(lái)理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理4

    使用TensorFlow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型更新

    使用TensorFlow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型的更新是一個(gè)涉及多個(gè)步驟的過(guò)程,包括模型定義、訓(xùn)練、評(píng)估以及根據(jù)新數(shù)據(jù)或需求進(jìn)行模型微調(diào)(Fine-tuning)或重新訓(xùn)練。下面我將詳細(xì)闡述這個(gè)過(guò)程,并附上相應(yīng)的TensorFlow代碼
    的頭像 發(fā)表于 07-12 11:51 ?206次閱讀