gpt4 book ai didi

tensorflow - tensorflow 中数据集管道中的高斯模糊图像

转载 作者:行者123 更新时间:2023-12-01 21:51:47 27 4
gpt4 key购买 nike

我希望我的部分数据增强对我的训练数据应用高斯模糊。

为此,我创建了一个自定义 Initializer 类,它初始化 DepthwiseConv2d 以获得所需的高斯内核。

但是我得到以下错误:

tensorflow.python.framework.errors_impl.FailedPreconditionError:  {{function_node __inference_Dataset_map_<lambda>_67}} Error while reading resource variable _AnonymousVar0 from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/_AnonymousVar0/class tensorflow::Var does not exist.
[[{{node depthwise_conv2d/depthwise/ReadVariableOp}}]]
[[IteratorGetNext]] [Op:__inference_distributed_function_694]

这是一个简单的工作示例:

import tensorflow as tf


class GaussianInitializer(tf.keras.initializers.Initializer):
def __init__(self):
super().__init__()
self.sigma = 2

def _gaussian_kernel(self, kernel_size, dtype):
x = tf.range(-kernel_size // 2 + 1, kernel_size // 2 + 1, dtype=dtype)
g = tf.math.exp(-(tf.pow(x, 2) / (2 * tf.pow(tf.cast(self.sigma, dtype), 2))))
g_norm2d = tf.pow(tf.reduce_sum(g), 2)
return tf.tensordot(g, g, axes=0) / g_norm2d

def __call__(self, shape, dtype):
kernel = tf.expand_dims(self._gaussian_kernel(shape[0], dtype), axis=-1)
return tf.expand_dims(tf.tile(kernel, (1, 1, shape[2])), axis=-1)


def gaussian_blur_img(img):
blur_layer = tf.keras.layers.DepthwiseConv2D(
kernel_size=5, padding='same', use_bias=False,
depthwise_initializer=GaussianInitializer(), dtype=img.dtype
)
blur_layer.trainable = False
return tf.squeeze(blur_layer(tf.expand_dims(img, axis=0)), axis=0)


data = tf.data.Dataset.from_tensor_slices(
(tf.ones((1, 10, 10, 3)), tf.ones((1, 10, 10, 1)))
).map(lambda x, y: (gaussian_blur_img(x), y)).repeat().batch(10)


x = tf.keras.layers.Input((10, 10, 3))
y = tf.keras.layers.Conv2D(filters=1, kernel_size=1, activation=tf.keras.activations.relu)(x)

model = tf.keras.models.Model(inputs=[x], outputs=[y])
model.compile(loss=tf.losses.binary_crossentropy)
model.fit(data, steps_per_epoch=10, epochs=10)

我怎样才能解决这个问题?

最佳答案

还不确定上面的代码有什么问题,所以我不会接受我自己的答案,希望其他人能给出一个更好的答案来解释问题...编辑:由于没有人参与,我'选择我自己的答案。

不过,我确实设法创建了一个有效的高斯模糊滤镜,而且使用 tf.nn 而不是 tf.keras.layers 编写起来更简单:

def _gaussian_kernel(kernel_size, sigma, n_channels, dtype):
x = tf.range(-kernel_size // 2 + 1, kernel_size // 2 + 1, dtype=dtype)
g = tf.math.exp(-(tf.pow(x, 2) / (2 * tf.pow(tf.cast(sigma, dtype), 2))))
g_norm2d = tf.pow(tf.reduce_sum(g), 2)
g_kernel = tf.tensordot(g, g, axes=0) / g_norm2d
g_kernel = tf.expand_dims(g_kernel, axis=-1)
return tf.expand_dims(tf.tile(g_kernel, (1, 1, n_channels)), axis=-1)


def apply_blur(img):
blur = _gaussian_kernel(3, 2, 3, img.dtype)
img = tf.nn.depthwise_conv2d(img[None], blur, [1,1,1,1], 'SAME')
return img[0]

data = tf.data.Dataset.from_tensor_slices(
(tf.pad(tf.ones((1, 1, 1, 2)), ((0, 0),(1, 1),(1, 1),(0,1))), tf.ones((1, 3, 3, 1)))
).map(lambda x, y: (apply_blur(x), y)).repeat().batch(10)

按预期工作。

关于tensorflow - tensorflow 中数据集管道中的高斯模糊图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com