【问题标题】:How convolutional layer filter size affects input length and how to keep labels the same size卷积层滤波器大小如何影响输入长度以及如何保持标签大小相同
【发布时间】:2019-09-26 03:42:32
【问题描述】:

假设我们在 tensorflow.keras 中有一个输入大小为 100 的一维卷积层(为简单起见,忽略批处理和通道维度),内核大小为 51(实际上可以通过在多个层中应用更小的过滤器来实现)并且我们希望保持输出的长度与输入的长度相同(填充=相同)。我想知道应用过滤器后哪些索引将填充为零,是最右边的 50 个还是最左边的 50 个或每边 25 个。此外,如果我每个元素都有一个标签,那么将标签数量减少到 50 个以仍然最好地代表输入的最佳方法是什么。

【问题讨论】:

    标签: tensorflow keras conv-neural-network convolution


    【解决方案1】:

    padding 是两边,在应用卷积之前,你可以很容易地看到这个与卷积的代码。 (预期结果是中心的内核大小)

    import numpy as np
    from keras.layers import Input, Conv1D
    from keras.models import Model
    
    length = 100
    filt = 51
    
    ins = Input((length,1))
    outs = Conv1D(1, filt, padding='same', kernel_initializer='ones', use_bias=False)(ins)
    model = Model(ins, outs)
    
    preds = model.predict(np.ones((1,length,1)))[0, :, 0]
    print('result length = ', len(preds))
    print(preds)
    

    输出:

    result length =  100
    [26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
     44. 45. 46. 47. 48. 49. 50. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51.
     51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51.
     51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51.
     51. 51. 51. 50. 49. 48. 47. 46. 45. 44. 43. 42. 41. 40. 39. 38. 37. 36.
     35. 34. 33. 32. 31. 30. 29. 28. 27. 26.]
    

    注意它是如何逐渐减小到边界的。随着过滤器的滑动,这些零的数量越来越多。


    最后一个问题没有明确的答案。这取决于你需要做什么。 “最佳代表”是什么意思?您可以使用Dense(50),它可以吗?这取决于你想要什么。您可以将 100 重塑为 50x2 并取新轴的平均值......确实有很多解决方案,每个都有自己的属性。

    【讨论】:

    • 这是我的猜测。感谢您的精彩插图。对我来说,这是二进制检测值的时间序列。我正在考虑从两侧剥离标签序列并将 50 个保留在中间。
    • 可能是LSTM(units),然后是Reshape((50,2*units)),然后是另一个LSTM(whatever),最后是Dense(classes)? --- 这也可能适用于 `Conv1D 而不是 LSTM,但我会使用短过滤器。
    • 标签序列正在考虑减小其大小。是否可以为此目的使用 LSTM 层?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2017-09-08
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多