【问题标题】:How can I apply a keras layer on each 2d slice of a 4d tensor by using lambda and map_fn?如何使用 lambda 和 map_fn 在 4d 张量的每个 2d 切片上应用 keras 层?
【发布时间】:2021-05-25 00:03:13
【问题描述】:

假设我们有一个张量 x,其形状为 (64,100,5,32),对应于 (batchSize,Length,Height,Channels)。现在我想为第 32 个通道的每个大小 (100,5) 的每个 2D 矩阵应用 2D 转换层。所以我需要提取 32 个切片并使用相同的 2D 卷积层(参数)对其进行处理。我不知道如何从 lambda und map_fn 开始(请不要使用时间分布层)。最后,我想要一个大小为 (64,100,5,32) 的张量。

感谢您截取了一个简短的代码。

【问题讨论】:

    标签: python tensorflow keras lambda tf.keras


    【解决方案1】:

    您可以简单地使用带有索引切片的 for 循环(没有 Lambda 层)。这是一个虚拟的例子:

    n_sample = 3
    H,W,C = 100,5,32
    X = np.random.uniform(0,1, (n_sample,H,W,C))
    
    inp = Input((H,W,C))
    convs = []
    conv = Conv2D(1, 3, padding='same') # this is always the same for all the slices
    
    for c in range(inp.shape[-1]):
        _x = tf.expand_dims(inp[:,:,:,c], -1)
        convs.append(conv(_x))
    convs = Concatenate()(convs)
    
    model = Model(inp, convs)
    model.compile('adam', 'mse')
    model.fit(X,X, epochs=2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2019-12-17
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2019-10-21
      相关资源
      最近更新 更多