<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 五、總結 在上一章中,我們了解了 TensorFlow 和 RNN 模型的另一個接口。 本章將對 TensorFlow 進行總結,探討我們已經走了多遠,以及從這里可以去哪里。 首先,我們將回顧字體分類問題的研究進展,然后簡要介紹除深度學習之外的 TensorFlow,并查看其將來的發展方向。 在本章的最后,您將熟悉以下概念: * 研究回顧 * 快速瀏覽所有模型 * TensorFlow 的未來 * 其他一些 TensorFlow 項目 現在讓我們開始詳細研究和評估模型。 # 研究回顧 在本節中,我們將比較字體分類問題中的模型。 首先,我們應該提醒自己數據是什么樣的。 然后,我們將檢查簡單的邏輯密集神經網絡和卷積神經網絡模型。 使用 TensorFlow 建模已經走了很長一段路。 但是,在繼續進行深度學習之前,讓我們回頭看看模型如何比較字體分類問題。 首先,讓我們再次查看數據,這樣我們就不會忽略這個問題。 實際上,讓我們看一個包含每種字體的所有字母和數字的圖像,只是看看我們有什么形狀: ```py # One look at a letter/digit from each font # Best to reshape as one large array, then plot all_letters = np.zeros([5*36,62*36]) for font in range(5): for letter in range(62): all_letters[font*36:(font+1)*36, letter*36:(letter+1)*36] = \ train[9*(font*62 + letter)] ``` Matplotlib 需要處理很多子圖。 因此,我們將創建一個新數組,高 5 幅圖像,5 種字體乘以 36 像素,寬 62 幅圖像,62 個字母或數字乘以 36 像素。 分配零數組后,我們可以將訓練圖像堆疊到其中。 字體和字母充當索引,并且我們在大型數組中一次設置`36x36`的值。 注意,這里我們在`train`數組中有`9`,因為我們每個字母只采取一種抖動類型。 讓我們來看一下`pcolormesh`的快速調用: ```py plt.pcolormesh(all_letters, cmap=plt.cm.gray) ``` ![Research evaluation](https://img.kancloud.cn/e1/fb/e1fb624435ae6e172793a4a99c3ddb12_566x361.jpg) 如您所見,我們擁有整個字母,大寫和小寫以及數字 0 到 9。某些字體看起來與其他字體相似,而無論如何`0`字體在其自身的世界中,無論如何對于人眼都是如此。 每種字體都有有趣的樣式屬性,我們希望我們的模型能夠繼續使用。 # 快速瀏覽所有模型 讓我們回顧一下我們構建的每個模型,以對這些字體及其優點和缺點進行建模: ![A quick review of all the models](https://img.kancloud.cn/7f/53/7f5370e56fcf6d6a99c3d9ce49368593_566x399.jpg) 乍一看,我們緩慢地建立了更復雜的模型,并考慮了數據的結構以提高準確率。 ## 邏輯回歸模型 首先,我們從一個簡單的邏輯回歸模型開始: ![The logistic regression model](https://img.kancloud.cn/25/d2/25d2433d84debf358b6f45e9522d6556_566x400.jpg) 它具有`36x36`像素外加 1 倍乘以 5 類總權重,即我們需要訓練的 6,485 個參數。 經過 1,000 次訓練后,此模型的驗證準確率達到了 40%。 您的結果可能會有所不同。 這相對較差,但是該模型具有一些優勢。 讓我們回頭看一下代碼: ```py # These will be inputs ## Input pixels, flattened x = tf.placeholder("float", [None, 1296]) ## Known labels y_ = tf.placeholder("float", [None,5]) # Variables W = tf.Variable(tf.zeros([1296,5])) b = tf.Variable(tf.zeros([5])) # Just initialize sess.run(tf.initialize_all_variables()) # Define model y = tf.nn.softmax(tf.matmul(x,W) + b) ``` 邏輯回歸的簡單性意味著我們可以直接看到并計算每個像素如何影響類概率。 這種簡單性也使模型在訓練中相對較快地收斂,并且當然也易于編程,因為它只需要幾行 TensorFlow 代碼。 ## 單隱層神經網絡模型 我們的下一個模型是具有最終 Softmax 激活層的單個隱藏層密集連接的神經網絡,等效于邏輯回歸: ![The single hidden layer neural network model](https://img.kancloud.cn/72/d8/72d88d141649487545d39eb591c06092_566x390.jpg) 該模型具有`36x36`像素,外加 1 個偏移乘以 128 個節點,再加上 128 個隱藏節點加上 1 個偏移乘以 5 個類的總權重,即 166,661 個參數。 隱藏層使用`sigmoid`激活函數來實現非線性。 在經過 5,000 個周期后,參數的糾纏達到了約 60% 的驗證準確率,這是一個很大的改進。 但是,此改進的代價是大量增加了計算復雜性中的參數數量,您可以從代碼中大致了解一下: ```py # These will be inputs ## Input pixels, flattened x = tf.placeholder("float", [None, 1296]) ## Known labels y_ = tf.placeholder("float", [None,5]) # Hidden layer num_hidden = 128 W1 = tf.Variable(tf.truncated_normal([1296, num_hidden], stddev=1./math.sqrt(1296))) b1 = tf.Variable(tf.constant(0.1,shape=[num_hidden])) h1 = tf.sigmoid(tf.matmul(x,W1) + b1) # Output Layer W2 = tf.Variable(tf.truncated_normal([num_hidden, 5], stddev=1./math.sqrt(5))) b2 = tf.Variable(tf.constant(0.1,shape=[5])) # Just initialize sess.run(tf.initialize_all_variables()) # Define model y = tf.nn.softmax(tf.matmul(h1,W2) + b2) ``` 我們不再具有將單個像素分類到概率的簡單函數。 但這僅需要幾行編碼,并且表現會更好。 ## 深度神經網絡 深度神經網絡更進一步,由第一層的 128 個節點組成,饋入下一層的 32 個節點,然后饋入 Softmax 以獲得 170,309 個參數; 真的沒有那么多: ![Deep neural network](https://img.kancloud.cn/a2/49/a249598876c40c93e20ca20e214282e6_566x500.jpg) 經過 25,000 個周期后,我們的驗證準確率微幅提高了 63%: ```py # These will be inputs ## Input pixels, flattened x = tf.placeholder("float", [None, 1296]) ## Known labels y_ = tf.placeholder("float", [None,5]) # Hidden layer 1 num_hidden1 = 128 W1 = tf.Variable(tf.truncated_normal([1296,num_hidden1], stddev=1./math.sqrt(1296))) b1 = tf.Variable(tf.constant(0.1,shape=[num_hidden1])) h1 = tf.sigmoid(tf.matmul(x,W1) + b1) # Hidden Layer 2 num_hidden2 = 32 W2 = tf.Variable(tf.truncated_normal([num_hidden1, num_hidden2],stddev=2./math.sqrt(num_hidden1))) b2 = tf.Variable(tf.constant(0.2,shape=[num_hidden2])) h2 = tf.sigmoid(tf.matmul(h1,W2) + b2) # Output Layer W3 = tf.Variable(tf.truncated_normal([num_hidden2, 5], stddev=1./math.sqrt(5))) b3 = tf.Variable(tf.constant(0.1,shape=[5])) # Just initialize sess.run(tf.initialize_all_variables()) # Define model y = tf.nn.softmax(tf.matmul(h2,W3) + b3) ``` 更深層次的靜態模型可能會做得更好,但這證明了深度學習的某些優勢,可以處理相當大的非線性,并且這再次花費了一些額外的編程精力。 ## 卷積神經網絡 緊密連接的神經網絡工作得很好,但是字體是由它們的樣式而不是特定的像素定義的: ![Convolutional neural network](https://img.kancloud.cn/39/f7/39f75e7ad15c66524b4f7b7b0d9f4622_566x524.jpg) 重復出現的局部特征應該是您模型的重要線索。 我們使用卷積神經網絡捕獲了其中一些局部特征。 我們從一個卷積層開始,一個`5x5`窗口,使用整流線性單元,通過四個額外的偏項計算四個特征,并提取了有趣的局部參數。 接下來,我們將`2x2`的最大池化層應用于每個特征,從而將中間值的數量減少到`18x18x4`加上 1 個偏差。 將其平整為 1,297 個數字,并放入一個密集的神經網絡的 32 個節點,然后進行 Softmax 激活,從而完成了具有 41,773 個參數的模型。 盡管實現和代碼比以前要花更多的精力,但是這可以很好地縮減模型的整體大小: ```py # Conv layer 1 num_filters = 4 winx = 5 winy = 5 W1 = tf.Variable(tf.truncated_normal( [winx, winy, 1 , num_filters], stddev=1./math.sqrt(winx*winy))) b1 = tf.Variable(tf.constant(0.1, shape=[num_filters])) # 5x5 convolution, pad with zeros on edges xw = tf.nn.conv2d(x_im, W1, strides=[1, 1, 1, 1], padding='SAME') h1 = tf.nn.relu(xw + b1) # 2x2 Max pooling, no padding on edges p1 = tf.nn.max_pool(h1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID') # Need to flatten convolutional output for use in dense layer p1_size = np.product( [s.value for s in p1.get_shape()[1:]]) p1f = tf.reshape(p1, [-1, p1_size ]) # Dense layer num_hidden = 32 W2 = tf.Variable(tf.truncated_normal( [p1_size, num_hidden], stddev=2./math.sqrt(p1_size))) b2 = tf.Variable(tf.constant(0.2, shape=[num_hidden])) h2 = tf.nn.relu(tf.matmul(p1f,W2) + b2) # Output Layer W3 = tf.Variable(tf.truncated_normal( [num_hidden, 5], stddev=1./math.sqrt(num_hidden))) b3 = tf.Variable(tf.constant(0.1,shape=[5])) keep_prob = tf.placeholder("float") h2_drop = tf.nn.dropout(h2, keep_prob) ``` 僅訓練了 5000 個周期后,我們就清除了 68% 的準確率。 我們確實必須對卷積進行編碼,但這并不是那么困難。 通過對問題的結構應用一些知識,我們同時減小了模型大小,但提高了準確率。 干得好! ## 深度卷積神經網絡 結合了深度和卷積方法,我們最終創建了一個具有幾個卷積層的模型: ![Deep convolutional neural network](https://img.kancloud.cn/a4/e5/a4e58f121f606cabcb898204b744e5f0_566x670.jpg) 盡管我們使用了較小的`3x3`窗口,但我們在第一個卷積層上計算了 16 個濾鏡。 在進行最大`2x2`的池化之后,我們再次使用另一個`3x3`窗口和 4 個過濾器對池化值進行了處理。 另一個合并層再次饋入 32 個緊密連接的神經元和 Softmax 輸出。 因為在饋入密集神經網絡之前我們在池中有更多的卷積,所以在此模型中實際上我們具有較少的參數(準確地說是 10,765 個),幾乎與邏輯回歸模型一樣少。 但是,該模型以 6,000 個周期的速度達到了 80% 的驗證準確率,證明了您的新深度學習和 TensorFlow 技能。 ```py # Conv layer 1 num_filters1 = 16 winx1 = 3 winy1 = 3 W1 = tf.Variable(tf.truncated_normal( [winx1, winy1, 1 , num_filters1], stddev=1./math.sqrt(winx1*winy1))) b1 = tf.Variable(tf.constant(0.1, shape=[num_filters1])) # 5x5 convolution, pad with zeros on edges xw = tf.nn.conv2d(x_im, W1, strides=[1, 1, 1, 1], padding='SAME') h1 = tf.nn.relu(xw + b1) # 2x2 Max pooling, no padding on edges p1 = tf.nn.max_pool(h1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID') # Conv layer 2 num_filters2 = 4 winx2 = 3 winy2 = 3 W2 = tf.Variable(tf.truncated_normal( [winx2, winy2, num_filters1, num_filters2], stddev=1./math.sqrt(winx2*winy2))) b2 = tf.Variable(tf.constant(0.1, shape=[num_filters2])) # 3x3 convolution, pad with zeros on edges p1w2 = tf.nn.conv2d(p1, W2, strides=[1, 1, 1, 1], padding='SAME') h1 = tf.nn.relu(p1w2 + b2) # 2x2 Max pooling, no padding on edges p2 = tf.nn.max_pool(h1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID') ``` # TensorFlow 的未來 在本部分中,我們將觀察 TensorFlow 的變化方式,誰開始使用 TensorFlow 以及如何產生影響。 自 2015 年底發布以來,TensorFlow 已經看到更多發布版本: ![The future of TensorFlow](https://img.kancloud.cn/80/82/80820f8646c087c01bb0cef61b093966_566x415.jpg) TensorFlow 不斷更新。 盡管它不是 Google 的正式產品,但它還是開源的,并托管在 GitHub 上。 在撰寫本文時,TensorFlow 的版本為 1.2。 最新版本增加了分布式計算功能。 這些超出了本書的范圍,但總的來說,它們允許跨多臺機器上的多個 GPU 進行計算,以實現最大程度的并行化。 在繁重的開發過程中,更多功能總是指日可待。 TensorFlow 每天變得越來越流行。 幾家軟件公司最近發布了機器學習框架,但 TensorFlow 在采用方面表現突出。 在內部,Google 正在實踐他們的講道。 他們廣受贊譽的 DeepMind 團隊已改用 TensorFlow。 ![The future of TensorFlow](https://img.kancloud.cn/39/40/394041e38fd8b689b18e64e7c8cec493_566x272.jpg) 此外,許多擁有機器學習或數據科學程序的大學都將 TensorFlow 用于課程和研究項目。 當然,您已經在研究項目中使用過 TensorFlow,因此您處于領先地位。 ## 其他一些 TensorFlow 項目 最后,無論大小,其他公司都在使用 TensorFlow。 現在您是 TensorFlow 的從業人員,唯一的限制就是您可能遇到的問題和您的計算資源。 以下是一些有關 TensorFlow 下一步可以解決的問題的想法: * 圖像中的葉子分類: 像字體一樣,植物葉子在一個物種中具有相似的樣式。 您是否可以修改在本課程中建立的模型,以僅使用圖像識別物種? * 使用行車記錄儀視頻的路標識別: 假設您從長途旅行中獲得了許多行車記錄儀鏡頭。 高速公路上的路標可以為您提供許多信息,例如您在哪里以及應該走多快。 您可以建立一系列 TensorFlow 模型來查找素材中的速度限制嗎? * 預測出行時間的運輸研究: 此外,無論您的工作距離有多近,通勤時間都太長。 在交通和天氣等當前條件下,您應該能夠建立基于回歸的模型來預測您的旅行時間。 * 用于查找兼容日期的匹配算法: 最后,一家初創公司正在探索使用 TensorFlow 來尋找匹配算法。 如果將來算法會給您帶來一個約會,請不要感到驚訝。 基于 TensorFlow 的整潔項目太多,無法一一列舉。 但是,有機會,您會發現與自己的興趣有關的東西,如果沒有,那是貢獻自己的完美場所。 機器學習庫很多,但是 TensorFlow 仍然存在。 盡管本書側重于深度學習,但 TensorFlow 是一個通用的圖計算庫。 ![Some more TensorFlow projects](https://img.kancloud.cn/a8/d8/a8d8143bea3f64259918f7da0d4187bf_566x292.jpg) 深度神經網絡確實是 TensorFlow 能夠很好處理的一小部分數據建模。 但是,正如您在第 1 章入門中的“簡單計算”部分所看到的那樣,在簡單計算中,可以為圖規定的任何操作都可以在 TensorFlow 中進行。 一個實際的例子是在 TensorFlow 中實現 K 均值聚類。 更一般而言,可以很好地向量化并且需要某種訓練的操作可能會受益于 TensorFlow 的使用。 這一切都說明您是 TensorFlow 的未來! TensorFlow 是開源的,并且一直在變化。 因此,您可以在 GitHub 上輕松貢獻新功能。 這些可能是高度復雜的新模型類型或簡單的文檔更新。 ![Some more TensorFlow projects](https://img.kancloud.cn/6c/75/6c751592b3560f70c0a2bd5149ada94b_566x450.jpg) 所有更改都可以改善庫。 TensorFlow 的日益普及意味著您是最早掌握它的專業人士之一。 您在機器學習事業或研究中擁有優勢。 而且由于它不僅僅是深度學習,所以無論您處于哪個領域,TensorFlow 都可能適用于它的某些方面。 # 總結 在本章中,我們回顧了如何從謙虛的 Logistic 回歸模型爬升到使用深度卷積神經網絡對字體進行分類的高度。 我們還討論了 TensorFlow 的未來。 最后,我們回顧了用于字體分類的 TensorFlow 模型,并回顧了其準確率。 我們還花了一些時間來討論 TensorFlow 的發展方向。 恭喜! 您現在已經精通 TensorFlow。 您已將其應用于本系列中的多個研究問題和模型,并了解了其廣泛應用。 下一步是在您自己的項目中部署 TensorFlow。 造型愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看