【问题标题】:Convert 2D Convolutionary Neural Networks to 1D Convolutionary Neural Networks in Tensorflow在 Tensorflow 中将 2D 卷积神经网络转换为 1D 卷积神经网络
【发布时间】:2021-03-24 21:18:08
【问题描述】:

假设我提取了一些特征,它是 10x10 数据(可能是图像或倒谱图)。 通常我会把它输入到我的 2DConv 中,然后我就在路上了。

我的问题是,如果我必须将其转换为 100 个输入的 1D,除了我的过滤器不会检测周围邻居而是仅检测前一个和下一个检测模式的明显部分之外,我会得到什么缺点,这可能导致性能更差。

如果我必须这样做,我会只是重塑,使用重塑层还是使用置换层?

谢谢

【问题讨论】:

  • 特殊信息信息在 2d 到 1d 转换时丢失。如果您不需要,那么最好这样做(可以查看感受野)。问题是你在哪里使用这个?我的意思是它是您的神经网络中的特定步骤还是正在计划完整的一维网络?

标签: tensorflow conv-neural-network openvino


【解决方案1】:

是的,您对 GNA 的看法是正确的,我们的英特尔 GNA 硬件本身仅支持一维卷积,而二维卷积是实验性的。

这篇文章 (GNA Plugin - OpenVINO™ Toolkit) 指定了在卷积之前或之后添加 Permute 层的步骤。

你可以尝试这两种方法,看看哪一种适合你。

通常,TensorFlow 中的 1d 卷积是通过在 reshape 层中包裹 2d 卷积来创建的,以在 2d 卷积之前添加 H 维度并在之后将其移除。

同时 MO 在重塑层之前和之后插入置换,因为它们改变了数据的解释。

【讨论】:

    【解决方案2】:

    关于 2D/1D CNN 的优缺点你可以参考这个detailed thread

    在 TensorFlow 中,这些是构建 CNN 架构的过程:

    1. 如有必要,使用 tf.reshape() 对输入进行整形以匹配您打算构建的卷积层(例如,如果使用 2D 卷积,则将其整形为 3 维格式)

    2. 根据输入的维度,使用 tf.nn.conv1d()、tf.nn.conv2d() 或 tf.nn.conv3d 创建卷积层。

    3. 使用 tf.nn.maxpool() 创建一个极化层

    4. 重复第 2 步和第 3 步以获得额外的卷积和池化层

    5. 重塑卷积和池化层的输出,将其展平以准备全连接层

    6. 使用 tf.matmul() 函数创建一个全连接层,使用例如 tf.nn.relu() 添加激活并使用 tf.nn.dropout() 应用 dropout

    7. 为类预测创建最后一层,再次使用 tf.matmul()

    8. 使用 TensorFlow 变量存储权重和偏差这些只是创建 CNN 模型的基本步骤,还有定义训练和评估、执行模型和调整模型的额外步骤

    在 CNN 开发的第 2 步中,您使用 tf.nn.conv2d() 创建 2D 卷积层 - 此函数计算给定 4-D 输入的 2-D 卷积并过滤张量。

    因此,如果您在具有 784 个特征的 MNIST 数据集示例中找到 1D 向量,则可以使用 tensorflow reshape 方法将 1D 向量转换为 conv2d() 函数所需的 4D 输入,Reshape 方法转换为匹配图片格式 [Height x Width x Channel],然后 Tensor 输入变为 4-D:[Batch Size, Height, Width, Channel]:

    x = tf.reshape(x, shape=[-1, 28, 28, 1])

    其中 x 是占位符向量

    x = tf.placeholder(tf.float32, [None, num_input])

    您可以参考official Tensorflow documentation

    【讨论】:

    • 感谢您回复此问题。我的问题是我开始使用 GNA 并且 GNA 支持 1DCNN,几乎最常见的声音特征是 2D 频谱图或倒谱图。当我们使用 GNA 时,我们需要将它们转换为 1D,因为 2D 是实验性的。首先,我应该基本上坚持 2D 并进行测试,并且可能使用文档中指定的 Permute Layer,因为 GNA 的输入与 Openvino 不同。或者我应该将我的输入转换为 2D 到 1D 并减少我的损失,因为在 CPU 上进行相同测试时,1D 推理得分对我来说更糟
    猜你喜欢
    • 2020-11-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多