我想使用Conv2D
层来跨越输入图像并运行三个2x2
内核
这不是tensorflow的目的,但我真的希望使用tensorflow作为后端引擎来高效运行内核,并在不同的设备GPU和/或CPU之间分配工作负载
我尝试了如下代码。但它似乎不太管用
import tensorflow as tf
class InitConvKernels(tf.keras.initializers.Initializer):
def __init__(self, num_kernels, kernel_tensor):
self.kernel_list= kernel_tensor
self.index = -1
self.num_kernels = num_kernels
def __call__(self, shape, dtype=None):
index += 1
assert(self.index <= self.num_kernels) # doesn't affect anything
tf.print(shape) # doesn't work
return self.kernel_list[index]
def get_config(self):
return {'kernel_list': self.kernel_list, 'num_kernels': self.num_kernels}
我正在调用自定义初始值设定项,但返回的层为空:
kernel_list = tf.constant([[[-1, -1], [-1, -1]], [[1, 1], [1, 1]], [[-1, 1], [1, -1]],])
layer = layers.Conv2D(
filters=3,
kernel_size=2,
kernel_initializer=InitConvKernels(3,kernel_list),
bias_initializer=initializers.Zeros()
)
layer.variables
为空([]
)
layer.layer.get_weights()
也是空的([]
)
我的目标是评估输入图像上kernel_list
中三个内核的卷积,并汇总所有结果
正在加载image from url。
构建一个运行kernel的模型(运行更多内核,使
kernel_init
成为生成器,并在初始化Conv2D
时随时调整过滤器的数量)以及可视化输出:
编辑: 值得一提的是OpenAI's Triton,它可以帮助使用更高级的语言和框架(如pytorch)来运行高效的GPU代码:
相关问题 更多 >
编程相关推荐