【发布时间】:2021-02-22 00:24:07
【问题描述】:
我正在努力使用 tf.boolean_mask 处理来自 Flatten 层的自定义屏蔽输入。您能否给我一个提示,为什么没有产生 (None, 1024) 输出的掩蔽?我将不胜感激任何帮助。
谢谢你:)
class InputReduction(keras.layers.Layer):
def __init__(self, mask_idx):
super(InputReduction, self).__init__()
self.mask_idx = mask_idx
def call(self, inputs):
mask = np.array([True for _ in range(inputs.shape[1])])
for idx in self.mask_idx:
mask[idx] = False
print(mask)
inputs = tf.boolean_mask(inputs, mask)
print(inputs.shape)
return inputs
model = keras.models.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=x_train.shape[1:]),
keras.layers.Conv2D(32, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Dropout(0.25),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Dropout(0.25),
keras.layers.Flatten(),
InputReduction(mask_idx=[1,2,3]),
keras.layers.Dense(512, activation = 'relu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(num_classes, activation='softmax')
])
model.summary()
我的输出:
input_reduction_5 (InputRedu (None, 1024) 0
【问题讨论】:
-
您的代码不会重现您的问题。在您的示例中,
model是什么?它从未被定义。了解如何创建minimal, reproducible example。 -
@gobrewers14 抱歉,我粘贴了我的模型。看起来形状有问题。
-
你在 Flatten 之后有一个 1D 张量,(Batchsize,Channels)。您想屏蔽每个样本的 N 个元素,将其设为 (Batchsize, N) (在您的问题中,N=3 aggregation axis=1,2, 3) 。我说的对吗?
-
@Watanabe.N 是的,我想用数组中的索引屏蔽 (Batchsize, N) 的输入。例如:batch_size = 3, N = 5. input = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] ,让 mask_idx = [1,3],所以输出应该是 [[1,3,5], [6,8,10], [11,13,15]]
标签: python tensorflow keras