繁体   English   中英

Tensorflow 2.2,Lambda 层中的 tf.nn.conv1d

[英]Tensorflow 2.2, tf.nn.conv1d in Lambda layer

我想在 Lambda 层中执行卷积,但我无法让它以任何方式工作。

    kernel = [1.0,2.0,1.0]  # weighted moving average
    x = [   # history_size=5, num_features=10
      [1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],
      [2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0],
      [3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0],
      [4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0],
      [5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0],
    ]
    k = tf.constant(kernel, dtype=tf.float32)
    y = tf.nn.conv1d(x, k, stride=1, padding='SAME')

我意识到在上面的例子中尺寸不正确,但这是我数据的实际格式。 训练样本的形状为(history_size, num_features)并且内核必须沿着 history_size 分别对每个特征进行卷积。 任何帮助,将不胜感激。 我找不到有关如何手动执行 tf.nn.conv1d 的示例。

您可以numpy.convolve()使用numpy.convolve()

import numpy as np

kernel = [1.0,2.0,1.0]  # weighted moving average
x = [   # history_size=5, num_features=10
  [1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],
  [2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0],
  [3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0],
  [4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0],
  [5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0],
]

output = []
for i in range(len(x)):
    output.append(list(np.convolve(x[i], kernel, mode = 'same')))
output

'''
[[3.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 3.0],
 [6.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 6.0],
 [9.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 9.0],
 [12.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 12.0],
 [15.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 15.0]]
'''

您可以尝试根据文档更改最适合您的mode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM