Javascript Tensorflow、conv2d和过滤器

Javascript Tensorflow、conv2d和过滤器,javascript,multidimensional-array,tensorflow,convolution,Javascript,Multidimensional Array,Tensorflow,Convolution,我是深入学习的初学者,试图理解算法的工作原理,使用JavaScript编写算法。现在我正在像Tensorflow一样开发conv2d的JavaScript实现,并且误解了如何处理不同数量的过滤器,我成功地实现了一个输出过滤器和多个输出,但我不知道如何使用多个过滤器输入(例如32->64)生成操作 下面是使用 : const outCount=32//输入过滤器计数 const inCount=1//输出特征的计数 常数filterSize=3 常数步长=1 const inShape=[1,10

我是深入学习的初学者,试图理解算法的工作原理,使用JavaScript编写算法。现在我正在像Tensorflow一样开发conv2d的JavaScript实现,并且误解了如何处理不同数量的过滤器,我成功地实现了一个输出过滤器和多个输出,但我不知道如何使用多个过滤器输入(例如32->64)生成操作

下面是使用 :

const outCount=32//输入过滤器计数
const inCount=1//输出特征的计数
常数filterSize=3
常数步长=1
const inShape=[1,10,10,outCount]
const outShape=[
1.
Math.ceil((形状[1]-filterSize+1)/stride),
Math.ceil((形状[2]-filterSize+1)/stride),
超过
];
常量过滤器=ndarray([],[filterSize,filterSize,inCount,outCount])
constconv2d=(输入)=>{
const result=ndarray(外形)
//对于每个输出特性
对于(设fo=0;fo
对于测试,我使用Tenforflow作为true的源,它的算法工作正常,但使用
1->N
。但我的问题是如何在输入值中添加对多个过滤器的支持,如
N->M

有人能解释一下如何修改此算法,使其与Tensorflow
tf.nn.conv2d

非常感谢。

您需要添加另一个for循环。您没有指定所有的输入形状和尺寸,因此实际上很难准确地编写它,但它看起来是这样的

  // agregate fragment of image and filter
  for (let fx = 0; fx < filterSize; fx += 1) {
    for (let fy = 0; fy < filterSize; fy += 1) {
      //addition
      for (let ch = 0; ch < input.get_channels) {
        const dx = (x * stride) + fx;
        const dy = (y * stride) + fy;

        fragment.data.push(input.get(0, dx, dy, ch));
        filter.data.push(filters.get(fx, fy, ch, fo));
      }
    }
  }
//删除图像片段并过滤
对于(设fx=0;fx
看起来你完全正确,非常感谢!
  // agregate fragment of image and filter
  for (let fx = 0; fx < filterSize; fx += 1) {
    for (let fy = 0; fy < filterSize; fy += 1) {
      //addition
      for (let ch = 0; ch < input.get_channels) {
        const dx = (x * stride) + fx;
        const dy = (y * stride) + fy;

        fragment.data.push(input.get(0, dx, dy, ch));
        filter.data.push(filters.get(fx, fy, ch, fo));
      }
    }
  }