问题
我有一个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乘2矩阵,其中的左上角值将等于核矩阵中的左上角值,结果的右上角将等于核矩阵的右上角,等等。( x_core中的特定零和1实现了这一点。)
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'如果我将
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(),I get:KeyError:“名称‘卷积1/内核:0’指不存在的张量。图中不存在‘卷积1/内核’操作。”
。
发布于 2021-12-19 17:58:01
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://stackoverflow.com/questions/70413900
复制相似问题