<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國際加速解決方案。 廣告
                # 多類分類 多類分類的一個流行示例是標記手寫數字的圖像。此示例中的類或標簽為{0,1,2,3,4,5,6,7,8,9}。在以下示例中,我們將使用 MNIST。讓我們像前面章節中所做的那樣加載 MNIST 圖像,代碼如下: ```py from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets(os.path.join( datasetslib.datasets_root, 'mnist'), one_hot=True) ``` 如果已按照前一章的說明下載了 MNIST 數據集,那么我們將獲得以下輸出: ```py Extracting /Users/armando/datasets/mnist/train-images-idx3-ubyte.gz Extracting /Users/armando/datasets/mnist/train-labels-idx1-ubyte.gz Extracting /Users/armando/datasets/mnist/t10k-images-idx3-ubyte.gz Extracting /Users/armando/datasets/mnist/t10k-labels-idx1-ubyte.gz ``` 現在讓我們設置一些參數,如下面的代碼所示: ```py num_outputs = 10 # 0-9 digits num_inputs = 784 # total pixels learning_rate = 0.001 num_epochs = 1 batch_size = 100 num_batches = int(mnist.train.num_examples/batch_size) ``` 上面代碼中的參數如下: * `num_outputs`:由于我們必須預測圖像代表十位數中的哪一位,因此我們將輸出數設置為 10.數字由打開或設置為 1 的輸出表示。 * `num_inputs`:我們知道我們的輸入數字是 28 x 28 像素,因此每個像素都是模型的輸入。因此,我們總共有 784 個輸入。 * `learning_rate`:此參數表示梯度下降優化器算法的學習率。我們將學習率任意設定為 0.001。 * `num_epochs`:我們將僅針對一次迭代運行我們的第一個示例,因此我們將周期數設置為 1。 * `batch_size`:在現實世界中,我們可能擁有龐大的數據集并加載整個數據集以便訓練模型可能是不可能的。因此,我們將輸入數據分成隨機選擇的批次。我們將`batch_size`設置為 100 個圖像,可以使用 TensorFlow 的內置算法一次選擇。 * `num_batches`:此參數設置應從總數據集中選擇批次的次數;我們將其設置為等于數據集中的項目數除以批量中的項目數。 我們鼓勵您嘗試使用這些參數的不同值。 現在讓我們使用以下代碼定義輸入,輸出,參數,模型和損失函數: ```py # input images x = tf.placeholder(dtype=tf.float32, shape=[None, num_inputs], name="x") # output labels y = tf.placeholder(dtype=tf.float32, shape=[None, num_outputs], name="y") # model paramteres w = tf.Variable(tf.zeros([784, 10]), name="w") b = tf.Variable(tf.zeros([10]), name="b") model = tf.nn.softmax(tf.matmul(x, w) + b) loss = tf.reduce_mean(-tf.reduce_sum(y * tf.log(model), axis=1)) optimizer = tf.train.GradientDescentOptimizer( learning_rate=learning_rate).minimize(loss) ``` 代碼類似于二分類示例,但有一個顯著差異:我們使用`softmax`而不是`sigmoid`函數。 Softmax 用于多類分類,而 sigmoid 用于二元類分類。 Softmax 函數是 sigmoid 函數的推廣,它將任意實數值的 n 維向量 z 轉換為實數值的 n 維向量 _σ(z)_,范圍`(0, 1]`和為 1。 現在讓我們運行模型并打印精度: ```py with tf.Session() as tfs: tf.global_variables_initializer().run() for epoch in range(num_epochs): for batch in range(num_batches): batch_x, batch_y = mnist.train.next_batch(batch_size) tfs.run(optimizer, feed_dict={x: batch_x, y: batch_y}) predictions_check = tf.equal(tf.argmax(model, 1), tf.argmax(y, 1)) accuracy_function = tf.reduce_mean( tf.cast(predictions_check, tf.float32)) feed_dict = {x: mnist.test.images, y: mnist.test.labels} accuracy_score = tfs.run(accuracy_function, feed_dict) print("epoch {0:04d} accuracy={1:.8f}".format( epoch, accuracy_score)) ``` 我們得到以下準確率: ```py epoch 0000 accuracy=0.76109999 ``` 讓我們嘗試在多次迭代中訓練我們的模型,以便在每次迭代中學習不同的批次。我們建立了兩個支持函數來幫助我們: ```py def mnist_batch_func(batch_size=100): batch_x, batch_y = mnist.train.next_batch(batch_size) return [batch_x, batch_y] ``` 上述函數將批量中的示例數作為輸入,并使用`mnist.train.next_batch()`函數返回一批特征(`batch_x`)和目標(`batch_y`): ```py def tensorflow_classification(num_epochs, num_batches, batch_size, batch_func, optimizer, test_x, test_y): accuracy_epochs = np.empty(shape=[num_epochs], dtype=np.float32) with tf.Session() as tfs: tf.global_variables_initializer().run() for epoch in range(num_epochs): for batch in range(num_batches): batch_x, batch_y = batch_func(batch_size) feed_dict = {x: batch_x, y: batch_y} tfs.run(optimizer, feed_dict) predictions_check = tf.equal( tf.argmax(model, 1), tf.argmax(y, 1)) accuracy_function = tf.reduce_mean( tf.cast(predictions_check, tf.float32)) feed_dict = {x: test_x, y: test_y} accuracy_score = tfs.run(accuracy_function, feed_dict) accuracy_epochs[epoch] = accuracy_score print("epoch {0:04d} accuracy={1:.8f}".format( epoch, accuracy_score)) plt.figure(figsize=(14, 8)) plt.axis([0, num_epochs, np.min( accuracy_epochs), np.max(accuracy_epochs)]) plt.plot(accuracy_epochs, label='Accuracy Score') plt.title('Accuracy over Iterations') plt.xlabel('# Epoch') plt.ylabel('Accuracy Score') plt.legend() plt.show() ``` 上述函數獲取參數并執行訓練迭代,打印每次迭代的準確率分數并打印準確率分數。它還可以保存`accuracy_epochs`數組中每個周期的準確率分數。之后,它繪制了每個周期的準確性。讓我們使用我們之前設置的參數運行此函數 30 個周期,使用以下代碼: ```py num_epochs=30 tensorflow_classification(num_epochs=num_epochs, num_batches=num_batches, batch_size=batch_size, batch_func=mnist_batch_func, optimizer=optimizer, test_x=mnist.test.images,test_y=mnist.test.labels) ``` 我們得到以下準確率和圖表: ```py epoch 0000 accuracy=0.76020002 epoch 0001 accuracy=0.79420000 epoch 0002 accuracy=0.81230003 epoch 0003 accuracy=0.82309997 epoch 0004 accuracy=0.83230001 epoch 0005 accuracy=0.83770001 --- epoch 6 to 24 removed for brevity --- epoch 0025 accuracy=0.87930000 epoch 0026 accuracy=0.87970001 epoch 0027 accuracy=0.88059998 epoch 0028 accuracy=0.88120002 epoch 0029 accuracy=0.88180000 ``` ![](https://img.kancloud.cn/39/fb/39fb5a7539e3cfad21c918dd48a72e35_844x496.png) 從圖中我們可以看出,初始迭代中的準確率會急劇提高,然后準確率的提高速度會降低。稍后,我們將看到如何在 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>

                              哎呀哎呀视频在线观看