<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 使用批量和隨機訓練 雖然 TensorFlow 根據反向傳播更新我們的模型變量,但它可以同時操作從一個基準觀察到一大批數據的任何事物。在一個訓練示例上操作可以使得學習過程非常不穩定,而使用太大的批次可能在計算上是昂貴的。選擇正確類型的訓練對于使我們的機器學習算法融合到解決方案至關重要。 ## 做好準備 為了使 TensorFlow 計算反向傳播的可變梯度,我們必須測量樣本或多個樣本的損失。隨機訓練一次只適用于一個隨機抽樣的數據 - 目標對,就像我們在上一個秘籍中所做的那樣。另一種選擇是一次放置大部分訓練樣例并平均梯度計算的損失。訓練批次的大小可以一次變化,直到并包括整個數據集。在這里,我們將展示如何將先前的回歸示例(使用隨機訓練)擴展到批量訓練。 我們將首先加載`numpy`,`matplotlib`和`tensorflow`,然后開始圖會話,如下所示: ```py import matplotlib as plt import numpy as np import tensorflow as tf sess = tf.Session() ``` ## 操作步驟 我們按如下方式處理秘籍: 1. 我們將從聲明批量大小開始。這將是我們將同時通過計算圖提供多少數據觀察: ```py batch_size = 20 ``` 1. 接下來,我們在模型中聲明數據,占位符和變量。我們在這里做的改變是我們改變了占位符的形狀。它們現在是兩個維度,第一個維度是`None`,第二個維度是批次中的數據點數。我們可以明確地將它設置為 20,但我們可以推廣并使用`None`值。同樣,正如[第 1 章](../Text/0.html),TensorFlow 入門中所述,我們仍然需要確保維度在模型中運行,這不允許我們執行任何非法矩陣操作: ```py x_vals = np.random.normal(1, 0.1, 100) y_vals = np.repeat(10., 100) x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32) y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32) A = tf.Variable(tf.random_normal(shape=[1,1])) ``` 1. 現在,我們將操作添加到圖中,現在將是矩陣乘法而不是常規乘法。請記住,矩陣乘法不是可交換的,因此我們必須在`matmul()`函數中以正確的順序輸入矩陣: ```py my_output = tf.matmul(x_data, A) ``` 1. 我們的`loss`函數會發生變化,因為我們必須采用批次中每個數據點的所有 L2 損失的平均值。我們通過將先前的損失輸出包裝在 TensorFlow 的`reduce_mean()`函數中來實現: ```py loss = tf.reduce_mean(tf.square(my_output - y_target)) ``` 1. 我們像以前一樣聲明我們的優化器并初始化我們的模型變量,如下所示: ```py my_opt = tf.train.GradientDescentOptimizer(0.02) train_step = my_opt.minimize(loss) init = tf.global_variables_initializer() sess.run(init) ``` 1. 最后,我們將循環并迭代訓練步驟以優化算法。這部分與以前不同,因為我們希望能夠繪制隨時間的損失并比較批次與隨機訓練的收斂。因此,我們初始化一個列表,每隔五個時間間隔存儲一次損失函數: ```py loss_batch = [] for i in range(100): rand_index = np.random.choice(100, size=batch_size) rand_x = np.transpose([x_vals[rand_index]]) rand_y = np.transpose([y_vals[rand_index]]) sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y}) if (i + 1) % 5 == 0: print('Step #' + str(i+1) + ' A = ' + str(sess.run(A))) temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y}) print('Loss = ' + str(temp_loss)) loss_batch.append(temp_loss) ``` 1. 這是 100 次迭代的最終輸出。請注意,`A`的值有一個額外的維度,因為它現在必須是一個 2D 矩陣: ```py Step #100 A = [[ 9.86720943]] Loss = 0\. ``` ## 工作原理 批量訓練和隨機訓練的優化方法和收斂性不同。找到一個好的批量大小可能很困難。為了了解批量與隨機指標之間的收斂程度如何不同,建議讀者將批量大小更改為各種級別。以下是保存和記錄訓練循環中隨機損失的代碼。只需在上一個秘籍中替換此代碼: ```py loss_stochastic = [] for i in range(100): rand_index = np.random.choice(100) rand_x = [x_vals[rand_index]] rand_y = [y_vals[rand_index]] sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y}) if (i + 1) % 5 == 0: print('Step #' + str(i+1) + ' A = ' + str(sess.run(A))) temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y}) print('Loss = ' + str(temp_loss)) loss_stochastic.append(temp_loss) ``` 下面是為同一回歸問題生成隨機和批量損失圖的代碼: ```py plt.plot(range(0, 100, 5), loss_stochastic, 'b-', label='Stochastic Loss') plt.plot(range(0, 100, 5), loss_batch, 'r--', label='Batch' Loss, size=20') plt.legend(loc='upper right', prop={'size': 11}) plt.show() ``` 我們得到以下繪圖: ![](https://img.kancloud.cn/ab/e5/abe5d16ba0b0ba59481208e8a50a7622_375x256.png) 圖 6:在 100 次迭代中繪制的隨機損失和批量損失(批量大小= 20)。請注意,批次損失更加平滑,隨機損失更加不穩定。 ## 更多 | 訓練類型 | 好處 | 缺點 | | --- | --- | --- | | 隨機 | 隨機性可能有助于擺脫當地的最低限度。 | 通常,需要更多迭代才能收斂。 | | 批量 | 更快地找到最小值。 | 需要更多資源來計算。 |
                  <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>

                              哎呀哎呀视频在线观看