Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用tensorflow实现两个张量的元素卷积?_Python_Tensorflow_Conv Neural Network - Fatal编程技术网

Python 如何使用tensorflow实现两个张量的元素卷积?

Python 如何使用tensorflow实现两个张量的元素卷积?,python,tensorflow,conv-neural-network,Python,Tensorflow,Conv Neural Network,在我的问题中,我想在我的神经网络模型中卷积两个张量 两个张量的形状分别为[None,2,1],[None,3,1]。尺寸为None的轴表示输入张量的批量大小。对于批次中的每个样本,我想用[2,1]和[3,1]形状卷积两个张量 然而,TensorFlow中的tf.nn.conv1d只能使用固定的内核对输入进行卷积。是否有任何函数可以根据批量大小轴支持两个张量的卷积,类似于tf.multiply,它可以将每个样本的两个张量相乘,或者只是元素相乘 我运行的代码可以简化如下: input_signal

在我的问题中,我想在我的神经网络模型中卷积两个张量

两个张量的形状分别为[None,2,1],[None,3,1]。尺寸为None的轴表示输入张量的批量大小。对于批次中的每个样本,我想用[2,1]和[3,1]形状卷积两个张量

然而,TensorFlow中的tf.nn.conv1d只能使用固定的内核对输入进行卷积。是否有任何函数可以根据批量大小轴支持两个张量的卷积,类似于tf.multiply,它可以将每个样本的两个张量相乘,或者只是元素相乘

我运行的代码可以简化如下:

input_signal = Input(shape=(L, M), name='input_signal')
input_h = Input(shape=(N), name='input_h')
faded= Lambda(lambda x: tf.nn.conv1d(input, x))(input_h) 

我想做的是,输入信号的样本可以被具有相同索引的输入信号的样本卷积。不过,这只是显示了我纯粹的想法,不能在环境中运行。我的问题是,如何修改代码以启用输入张量可以与批处理中每个样本的另一个输入张量进行卷积。

根据Conv1D层或中提到的任何其他层的内核大小参数的描述,您不能添加具有不同内核大小或步长的多个过滤器

此外,与不同大小的内核进行卷积将产生不同高度和宽度的输出。 假设核对称,输出大小的一般公式如下所示:

(十)−K+2P)/S+1

  • 其中X是输入高度/宽度
  • K是内核大小
  • P是零填充
  • S是步长
所以,假设您保持零填充和步幅不变,那么ConvD层中就不能有多个大小不同的内核

但是,在您的情况下,您可以使用API在同一输入或多个Conv1D层上为不同的输入和内核大小分别多次创建Conv1D,然后在堆叠不同输出之前,使用maxpool、CROPT或zero paddings匹配不同输出的尺寸

示例:

inputs = tf.keras.Input(shape=(n_timesteps,n_features))
x1 = tf.keras.layers.Conv1D(filters=32, kernel_size=2)(inputs)
x2 = tf.keras.layers.Conv1D(filters=16, kernel_size=3)(inputs)
#match dimensions (height and width) of x1 or x2 here 
x3 = tf.keras.layers.Concatenate(axis=-1)[x1,x2]
您可以使用或来匹配尺寸