<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國際加速解決方案。 廣告
                ## **實現:** **在輸入空間中進行梯度上升**,從空白輸入圖像開始,將**梯度下降**應用于卷積神經網絡輸入圖像的值,其目的是讓某個過濾器的響應**最大化**。得到的輸入圖像是選定過濾器具有最大響應的圖像。 * 構建一個*損失函數*,其目的是讓某個卷積層的某個過濾器的值最大化 * 使用隨機*梯度*下降來調節輸入圖像的值,以便讓這個激活值最大化 ***** *損失函數* ~~~ from keras.applications import VGG16 from keras import backend as K model = VGG16(weights='imagenet',include_top=False) layer_name = 'block3_conv1' filter_index = 0 layer_output = model.get_layer(layer_name).output loss = K.mean(layer_output[:, :, :, filter_index]) ~~~ 損失相對于輸入的*梯度* ~~~ grads = K.gradients(loss, model.input)[0] #調用gradients返回的是一個張量列表(本例中列表長度為1) #因此,只保留第一個元素,它是一個張量 grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5) #做除法前加上1e–5,以防不小心除以0 ~~~ 一種方法:給定輸入圖像,它能夠計算損失張量和梯度張量的值 你可以定義一個 Keras 后端函數來實現此方法:`iterate`是一個函數,它將一個 Numpy 張量(表示為長度為 1 的張量列表)轉換為兩個 Numpy 張量組成的列表,這兩個張量分別是損失值和梯度值。 ~~~ iterate = K.function([model.input], [loss, grads]) import numpy as np loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))]) ~~~ 通過隨機梯度下降讓損失最大化 ~~~ input_img_data = np.random.random((1, 150, 150, 3)) * 20 + 128. #從一張帶有噪聲的灰度圖像開始 step = 1. #每次梯度更新的步長 (以下4行)運行40次梯度上升 for i in range(40): loss_value, grads_value = iterate([input_img_data]) #計算損失值和梯度值 input_img_data += grads_value * step #沿著讓損失最大化的方向調節輸入圖像 ~~~ 需要對這個張量進行后處理,將其轉換為可顯示的圖像 ~~~ def deprocess_image(x): x -= x.mean() #(以下3行)對張量做標準化,使其均值為0,標準差為0.1 x /= (x.std() + 1e-5) x *= 0.1 x += 0.5 #(以下2行)將x裁切(clip)到[0, 1]區間 x = np.clip(x, 0, 1) x *= 255 #(以下3行)將x轉換為RGB數組 x = np.clip(x, 0, 255).astype('uint8') return x ~~~ ***** 將上述代碼片段放到一個 Python 函數中 * 輸入一個層的名稱和一個過濾器索引 * 返回一個有效的圖像張量,表示能夠將特定過濾器的激活最大化的模式 ~~~ def generate_pattern(layer_name, filter_index, size=150): layer_output = model.get_layer(layer_name).output #(以下2行)構建一個損失函數,將該層第n個過濾器的激活最大化 loss = K.mean(layer_output[:, :, :, filter_index]) grads = K.gradients(loss, model.input)[0] #計算這個損失相對于輸入圖像的梯度 grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5) #標準化技巧:將梯度標準化 iterate = K.function([model.input], [loss, grads]) #返回給定輸入圖像的損失和梯度 input_img_data = np.random.random((1, size, size, 3)) * 20 + 128. #從帶有噪聲的灰度圖像開始 step = 1.#(以下4行)運行40次梯度上升 for i in range(40): loss_value, grads_value = iterate([input_img_data]) input_img_data += grads_value * step img = input_img_data[0] return deprocess_image(img) ~~~
                  <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>

                              哎呀哎呀视频在线观看