【问题标题】:How to deal with the size of images and filters if we use Covolutional LSTM + Conv2D?如果我们使用卷积 LSTM + Conv2D,如何处理图像和过滤器的大小?
【发布时间】:2020-01-20 11:57:18
【问题描述】:

我正在研究卷积 LSTM + 卷积神经网络。我没有以图像格式获取我的数据,而是得到了 [10000x784] 的扁平图像矩阵。

表示 10000 张大小为 28x28 的图像

考虑到一个图像大小是 28x28,我正在为 CLSTM 尝试以下操作

我的模型是:

model = models.Sequential()
model.add(layers.Reshape((None,28, 28,1 ), input_shape=(784,)))
model.add(layers.ConvLSTM2D(filters=64, kernel_size=(3, 3),
                   input_shape=(None, 28, 28, 1),
                   padding='same', return_sequences=True))
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(2500, activation='relu'))
model.add(layers.Dense(1, activation='linear'))

但我遇到了错误。我该怎么做才能使 ndims=5?

【问题讨论】:

    标签: python python-3.x deep-learning lstm tensorflow2.0


    【解决方案1】:

    首先尝试打印模型的输入和输出详细信息:- (eg:)o/p 将是这样的 - 标记模型的输入:[{'name': 'input', 'index': 451, ' shape': array([ 1, 160, 160, 3], dtype=int32), 'dtype': , 'quantization': (0.0, 0)}] 标记模型的输出:[{'name': 'embeddings' , 'index': 450, 'shape': array([ 1, 512], dtype=int32), 'dtype': , '量化': (0.0, 0)}]

    一旦您获得详细信息,您将必须根据详细信息分配值。

    【讨论】:

      【解决方案2】:

      ndim=5的5个维度是[Batch, TimeSteps, ImageWidth, ImageHeight, ImageChannel] 默认情况下所有的conv Layers都会有[Batch]维度,即使你没有提到它也会是1,Time step是你必须给的。

      如果你用时间分布层包裹你的 conv2d 层,这意味着你将并行应用卷积到序列中的多个图像(最适合从视频中提取的帧,而不是独立图像)

      所以 TimeSteps 表示您想要提供多少这样的图像作为输入

      批次通常是作为批次处理的图像数量,之后将计算您的损失,这是任何 conv2d 层的一部分

      因此,请确定您希望通过多少张图像作为时间步长以及多少这样的时间步长作为批处理

      如果您有 1000 张图像,并且您希望将它们拆分为 100 个批次,这意味着您的 BatchSize 将为 100,您将获得 10 个这样的批次来完成您的 epoch。

      在这 100 张批量图像中,您可以将任意数量的图像(对您有意义)作为单个时间步(可能是 10 个,可能是 20 个)一次通过和卷积

      所以你需要决定这一点并将你的矩阵重塑为 (100 X 10 x 72 x 72 x imgChannel) 或您为批处理和 timeSteps 选择的任何数字

      >>> inputs = tf.keras.Input(shape=(10, 72, 72, 3))
      >>> conv_2d_layer = tf.keras.layers.Conv2D(64, (3, 3))
      >>> outputs = tf.keras.layers.TimeDistributed(conv_2d_layer)(inputs)
      >>> outputs.shape
      TensorShape([None, 10, 72, 72, 64])
      

      参考:Keras Time Distributed Layer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-20
        • 2020-10-28
        • 2020-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多