精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用TensorFlow寫個簡單的神經網絡

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

這次就用TensorFlow寫個神經網絡,這個神經網絡寫的很簡單,就三種層,輸入層--隱藏層----輸出層;

首先導入我們要使用的包

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

然后在設定一下我們畫圖的時候要顯示中文的字體,因為Python自帶的不支持中文的解釋

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

定義一個會話,因為圖是必須在會話中啟動的

#定義一個圖會話sess=tf.Session()

這里我選用公開的數據鶯尾花的數據集,這個數據集雖然都被大家 玩爛了,不過這個是一個學習代碼,就不計較那么多了;

#鶯尾花數據集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])

這里設置一個隨機種子,為了可以讓大家把結果復現出來

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

開始有模有樣的劃分數據集了,一個是訓練集,一個是測試集,訓練集占80%,測試集占20%

#劃分測試機和訓練集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]

在這里我們在將特征進行一個歸一化,也就是將數值型特征全部都轉換為0-1之間的數值,用特征最大距離作為分母;還有一些其他的標準化方法,有興趣可以了解,這個好處就是能夠讓迭代更加快速,還有就是消除量綱,就是單位之間影響;

使用nan_to_num這個函數主要是為了消除None值帶來的計算影響

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

好了,上面已經生成了我們想要的數據集;在這里我們在設置一次訓練的數據集多大,一般是選擇2^N倍數,因為是計算機是二進制存儲,這樣就快,這里我就隨意選擇了個25,因為數據集比較小,沒什么影響

batch_size=25

在這里定義一下訓練變量Y和X,順便設置為浮點類型

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

在這里我們設置一下隱藏層連接數

#設置隱藏層hidden_layer_nodes=5

開始定義各層的參數變量,因為輸入變量是三個

#定義各層變量,初始變量為3個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函數作為激活函數,以及輸出結果也使用relu函數

#定義隱藏層的輸出和輸出層的輸出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))

這里我們在定義一下損失函數,有用最大似然估計的,這里我們使用均方誤差方式

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

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

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

定義兩個list,用來存放在訓練中的測試集和訓練集的誤差

#訓練過程loss_vec=[]test_loss=[]

開始迭代,這里我們設置迭代次數為5000

for i in range(5000): #選取batch_size大小的數據集 rand_index=np.random.choice(len(x_vals_train),size=batch_size) #選取出數據集 rand_x=x_vals_train[rand_index] rand_y=np.transpose([y_vals_train[rand_index]]) #開始訓練步驟 sess.run(train_step,feed_dict={x_data:rand_x,y_target:rand_y}) #保存損失結果 temp_loss=sess.run(loss,feed_dict={x_data:rand_x,y_target:rand_y}) #保存損失函數 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)) #打印損失函數,沒五十次打印一次 if (i+1)%50==0: print('Generation: ' + str(i + 1) + '. Train_Loss = ' + str(temp_loss)+ '. test_Loss = ' + str(test_temp_loss))

迭代最后結果為

接下來我們在看看誤差隨著迭代變化的趨勢,下降的還不夠快,這些代碼其實還是很粗糙,太多地方需要優化了;下次在寫個優化版本的

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4765

    瀏覽量

    100568
  • 深度學習
    +關注

    關注

    73

    文章

    5493

    瀏覽量

    121001
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60500

原文標題:用TensorFlow寫個簡單的神經網絡

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TF之CNN:Tensorflow構建卷積神經網絡CNN的嘻嘻哈哈事之詳細攻略

    TF之CNN:Tensorflow構建卷積神經網絡CNN的嘻嘻哈哈事之詳細攻略
    發表于 12-19 17:03

    【PYNQ-Z2試用體驗】神經網絡基礎知識

    能在外界信息的基礎上改變內部結構,是一種自適應系統,通俗的講就是具備學習功能?,F代神經網絡是一種非線性統計性數據建模工具。簡單來說,就是給定輸入,神經網絡經過一系列計算之后,輸出最終結果。這好比人的大腦
    發表于 03-03 22:10

    【案例分享】ART神經網絡與SOM神經網絡

    元,它決定了該輸入向量在地位空間中的位置。SOM神經網絡訓練的目的就是為每個輸出層神經元找到合適的權向量,以達到保持拓撲結構的目的。SOM的訓練過程其實很簡單,就是接收到一個訓練樣本后,每個輸出層
    發表于 07-21 04:30

    簡單神經網絡的實現

    簡單神經網絡
    發表于 09-11 11:57

    【AI學習】第3篇--人工神經網絡

    `本篇主要介紹:人工神經網絡的起源、簡單神經網絡模型、更多神經網絡模型、機器學習的步驟:訓練與預測、訓練的兩階段:正向推演與反向傳播、以Tensor
    發表于 11-05 17:48

    什么是LSTM神經網絡

    簡單理解LSTM神經網絡
    發表于 01-28 07:16

    如何構建神經網絡?

    原文鏈接:http://tecdat.cn/?p=5725 神經網絡是一種基于現有數據創建預測的計算系統。如何構建神經網絡?神經網絡包括:輸入層:根據現有數據獲取輸入的層隱藏層:使用反向傳播優化輸入變量權重的層,以提高模型的預測
    發表于 07-12 08:02

    如何使用TensorFlow神經網絡模型部署到移動或嵌入式設備上

    有很多方法可以將經過訓練的神經網絡模型部署到移動或嵌入式設備上。不同的框架在各種平臺上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    發表于 08-02 06:43

    如何使用Numpy搭建神經網絡

    很多同學入門機器學習之后,直接TensorFlow調包實現神經網絡,對于神經網絡內在機理知之甚少。
    的頭像 發表于 05-18 11:02 ?3575次閱讀
    如何使用Numpy搭建<b class='flag-5'>神經網絡</b>

    谷歌正式發布TensorFlow神經網絡

    日前,我們很高興發布了 TensorFlow神經網絡 (Graph Neural Networks, GNNs),此庫可以幫助開發者利用 TensorFlow 輕松處理圖結構化數據。
    的頭像 發表于 01-05 13:44 ?1466次閱讀

    Python從頭實現一個神經網絡來理解神經網絡的原理1

    有個事情可能會讓初學者驚訝:神經網絡模型并不復雜!『神經網絡』這個詞讓人覺得很高大上,但實際上神經網絡算法要比人們想象的簡單。 這篇文章完全是為新手準備的。我們會通過
    的頭像 發表于 02-27 15:05 ?669次閱讀
    <b class='flag-5'>用</b>Python從頭實現一個<b class='flag-5'>神經網絡</b>來理解<b class='flag-5'>神經網絡</b>的原理1

    Python從頭實現一個神經網絡來理解神經網絡的原理2

    有個事情可能會讓初學者驚訝:神經網絡模型并不復雜!『神經網絡』這個詞讓人覺得很高大上,但實際上神經網絡算法要比人們想象的簡單。 這篇文章完全是為新手準備的。我們會通過
    的頭像 發表于 02-27 15:06 ?599次閱讀
    <b class='flag-5'>用</b>Python從頭實現一個<b class='flag-5'>神經網絡</b>來理解<b class='flag-5'>神經網絡</b>的原理2

    Python從頭實現一個神經網絡來理解神經網絡的原理3

    有個事情可能會讓初學者驚訝:神經網絡模型并不復雜!『神經網絡』這個詞讓人覺得很高大上,但實際上神經網絡算法要比人們想象的簡單。 這篇文章完全是為新手準備的。我們會通過
    的頭像 發表于 02-27 15:06 ?705次閱讀
    <b class='flag-5'>用</b>Python從頭實現一個<b class='flag-5'>神經網絡</b>來理解<b class='flag-5'>神經網絡</b>的原理3

    Python從頭實現一個神經網絡來理解神經網絡的原理4

    有個事情可能會讓初學者驚訝:神經網絡模型并不復雜!『神經網絡』這個詞讓人覺得很高大上,但實際上神經網絡算法要比人們想象的簡單。 這篇文章完全是為新手準備的。我們會通過
    的頭像 發表于 02-27 15:06 ?663次閱讀
    <b class='flag-5'>用</b>Python從頭實現一個<b class='flag-5'>神經網絡</b>來理解<b class='flag-5'>神經網絡</b>的原理4

    使用TensorFlow進行神經網絡模型更新

    使用TensorFlow進行神經網絡模型的更新是一個涉及多個步驟的過程,包括模型定義、訓練、評估以及根據新數據或需求進行模型微調(Fine-tuning)或重新訓練。下面我將詳細闡述這個過程,并附上相應的TensorFlow代碼
    的頭像 發表于 07-12 11:51 ?355次閱讀