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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 使用多個層 現在我們已經介紹了多個操作,我們將介紹如何連接具有通過它們傳播的數據的各個層。 ## 做好準備 在本文中,我們將介紹如何最好地連接各種層,包括自定義層。我們將生成和使用的數據將代表小型隨機圖像。最好通過一個簡單的例子來理解這種類型的操作,看看我們如何使用一些內置層來執行計算。我們將探索的第一層稱為移動窗口。我們將在 2D 圖像上執行小的移動窗口平均值,然后第二層將是自定義操作層。 在本節中,我們將看到計算圖可能變得龐大且難以查看。為了解決這個問題,我們還將介紹命名操作和創建層范圍的方法。首先,加載`numpy`和`tensorflow`,然后使用以下命令創建圖: ```py import tensorflow as tf import numpy as np sess = tf.Session() ``` ## 操作步驟 我們按如下方式處理秘籍: 1. 首先,我們使用 NumPy 創建示例 2D 圖像。該圖像將是`4` x `4`像素圖像。我們將在四個方面創建它;第一個和最后一個維度的大小為 1.請注意,某些 TensorFlow 圖像函數將在四維圖像上運行。這四個維度是圖像編號,高度,寬度和通道,為了使其成為一個具有一個通道的圖像,我們將兩個維度設置為`1`,如下所示: ```py x_shape = [1, 4, 4, 1] x_val = np.random.uniform(size=x_shape) ``` 1. 現在,我們必須在圖中創建占位符,我們可以在其中提供示例圖像,如下所示: ```py x_data = tf.placeholder(tf.float32, shape=x_shape) ``` 1. 為了在我們的`4` x `4`圖像上創建一個移動窗口平均值,我們將使用一個內置函數,它將在形狀窗口`2` x `2`上收斂一個常量。我們將使用的函數是`conv2d()`;此函數在圖像處理和 TensorFlow 中非常常用。此函數采用窗口的分段產品和我們指定的過濾器。我們還必須在兩個方向上指定移動窗口的步幅。在這里,我們將計算四個移動窗口平均值:左上角,右上角,左下角和右下角四個像素。我們通過創建`2` x `2`窗口并在每個方向上具有長度`2`的步幅來實現這一點。為取平均值,我們將`2` x `2`窗口用`0.25`的常數卷積,如下: ```py my_filter = tf.constant(0.25, shape=[2, 2, 1, 1]) my_strides = [1, 2, 2, 1] mov_avg_layer= tf.nn.conv2d(x_data, my_filter, my_strides, padding='SAME', name='Moving_Avg_Window') ``` > 請注意,我們還使用函數的`name`參數命名此層`Moving_Avg_Window`。 為了計算卷積層的輸出大小,我們可以使用下面的公式`: Output = (W - F + 2P) / S + 1`,其中`W`是輸入大小,`F`是過濾器大小,`P`是零填充,并且`S`是步幅。 1. 現在,我們定義一個自定義層,它將在移動窗口平均值的`2` x `2`輸出上運行。自定義函數將首先將輸入乘以另一個`2` x `2`矩陣張量,然后為每個條目添加 1。在此之后,我們取每個元素的 sigmoid 并返回`2` x `2`矩陣。由于矩陣乘法僅對二維矩陣進行操作,因此我們需要刪除大小為`1`的圖像的額外維度。 TensorFlow 可以使用內置的`squeeze()`函數執行此操作。在這里,我們定義新層: ```py def custom_layer(input_matrix): input_matrix_sqeezed = tf.squeeze(input_matrix) A = tf.constant([[1., 2.], [-1., 3.]]) b = tf.constant(1., shape=[2, 2]) temp1 = tf.matmul(A, input_matrix_sqeezed) temp = tf.add(temp1, b) # Ax + b return tf.sigmoid(temp) ``` 1. 現在,我們必須將新層放在圖上。我們將使用命名范圍執行此操作,以便它在計算圖上可識別和可折疊/可擴展,如下所示: ```py with tf.name_scope('Custom_Layer') as scope: custom_layer1 = custom_layer(mov_avg_layer) ``` 1. 現在,我們只需輸入`4` x `4`圖像來替換占位符并告訴 TensorFlow 運行圖,如下所示: ```py print(sess.run(custom_layer1, feed_dict={x_data: x_val})) [[ 0.91914582 0.96025133] [ 0.87262219 0.9469803 ]] ``` ## 工作原理 通過命名操作和層范圍,可視化繪圖看起來更好。我們可以折疊和展開自定義層,因為我們在命名范圍內創建了它。在下圖中,請參閱左側的折疊版本和右側的展開版本: ![](https://img.kancloud.cn/a6/d9/a6d97aeb90ee0a51e517e8bd5a88098d_702x811.png) 圖 3:具有兩層的計算圖 第一層名為 Moving_Avg_Window。第二個是名為 Custom_Layer 的操作集合。它在左側折疊并在右側展開。
                  <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>

                              哎呀哎呀视频在线观看