gpt4 book ai didi

tensorflow - Keras - 在边界上填充带有值的张量

转载 作者:行者123 更新时间:2023-12-03 23:15:30 26 4
gpt4 key购买 nike

我有大小不均匀的图像,所以当卷积将它缩小 2 倍时,然后我做 Conv2DTranspose ,我没有得到一致的尺寸,这是一个问题。

所以我想我会用额外的行和列填充中间张量,其值与我在边缘看到的值相同,以尽量减少干扰。我如何在 Keras 中做到这一点,甚至可能吗?我的选择是什么?

最佳答案

使用 Tensorflow 作为背景,你可以使用 tf.concat() 将行/列的副本添加到张量中。

假设您要复制最后一行/列:

import tensorflow as tf
from keras.layers import Lambda, Input
from keras.models import Model
import numpy as np

def duplicate_last_row(tensor):
return tf.concat((tensor, tf.expand_dims(tensor[:, -1, ...], 1)), axis=1)

def duplicate_last_col(tensor):
return tf.concat((tensor, tf.expand_dims(tensor[:, :, -1, ...], 2)), axis=2)

# --------------
# Demonstrating with TF:

x = tf.convert_to_tensor([[[1, 2, 3], [4, 5, 6]],
[[10, 20, 30], [40, 50, 60]]])

x = duplicate_last_row(duplicate_last_col(x))
with tf.Session() as sess:
print(sess.run(x))
# [[[ 1 2 3 3]
# [ 4 5 6 6]
# [ 4 5 6 6]]
#
# [[10 20 30 30]
# [40 50 60 60]
# [40 50 60 60]]]


# --------------
# Using as a Keras Layer:

inputs = Input(shape=(5, 5, 3))
padded = Lambda(lambda t: duplicate_last_row(duplicate_last_col(t)))(inputs)

model = Model(inputs=inputs, outputs=padded)
model.compile(optimizer="adam", loss='mse', metrics=['mse'])
batch = np.random.rand(2, 5, 5, 3)
x = model.predict(batch, batch_size=2)
print(x.shape)
# (2, 6, 6, 3)

关于tensorflow - Keras - 在边界上填充带有值的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810015/

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