問題
我有Conv2D一層:
l0 = tf.keras.layers.Conv2D(1, 3, activation=None, input_shape=(36,36,3))
我想找出使用??的過濾器/內核矩陣中的確切值(不僅僅是它們的數量)。如何訪問內核矩陣值?
解決方案嘗試
import tensorflow as tf
import numpy as np
我創建了一個 numpy 陣列:
x_core = np.array([[1,0,0,1],
[0,0,0,0],
[0,0,0,0],
[1,0,0,1]],dtype=float)
將其轉換為形狀(1,4,4,1)張量:
x = tf.expand_dims(tf.expand_dims(tf.convert_to_tensor(x_core),axis=0),axis=3)
用Conv2D給它涂上一層strides=(2,2)。這意味著輸出將是一個 2 x 2 矩陣,其中左上角的值將等于內核矩陣中左上角的值,結果的右上角將等于內核矩陣的右上角,依此類推在。(特定的 0 和 1x_core實作了這一點。)
y = tf.keras.layers.Conv2D(1, 2, strides=(2,2), activation=None, input_shape=x.shape[1:])(x)
但是,y如果我重新運行代碼,就會發生變化,即過濾器不是常數,這表明內核矩陣是從分布中提取的。
類似問題
類似但不同的問題:How to get CNN kernel values in Tensorflow - 此方法僅適用于 Tensorflow 1。它的問題:
gr = tf.get_default_graph()給AttributeError: module 'tensorflow' has no attribute 'get_default_graph'如果我替換
get_default_graph為Graph(因為我認為這是較新的等價物),請放入name="conv1"我的圖層定義:conv_layer_1 = tf.keras.layers.Conv2D(1, 2, strides=(2,2), activation=None, input_shape=x.shape[1:],name="conv1")然后conv1_kernel_val = tf.Graph().get_tensor_by_name('conv1/kernel:0').eval()按照建議運行,我得到:
KeyError:“名稱‘conv1/kernel:0’指的是一個不存在的張量。圖中不存在操作‘conv1/kernel’。”
uj5u.com熱心網友回復:
import tensorflow as tf
input_shape = (4, 28, 28, 3)
x = tf.random.normal(input_shape)
model = tf.keras.layers.Conv2D(2, 3, activation='relu', input_shape=input_shape[1:])
y = model(x)
print(model.kernel)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/386341.html
上一篇:使用addEventListener方法通過vanillajavascript提交表單
下一篇:如何解決:ValueError:InputcontainsNaN,infinityoravaluetoolargefordtype('float32')?
