【发布时间】:2020-10-26 14:52:24
【问题描述】:
我目前正在尝试构建一个模型,该模型使用图像序列并使用 TF 后端在 Keras 中对序列中的每个项目(不保留序列之间的状态)进行分类;但是,我遇到了第一层输入形状的问题。
模型如下所示:
model.add(TimeDistributed(Conv2D(64, (3, 3), activation='relu'), input_shape=(10, 1, 224, 224, 3)))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(1, 1))))
model.add(TimeDistributed(Conv2D(128, (4,4), activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Conv2D(256, (4,4), activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(Dropout(0.5))
model.add(LSTM(256, return_sequences=False, dropout=0.5))
model.add(Dense(num_classes, activation='sigmoid'))
我认为我的问题来自对数组形状缺乏了解,我很可能在这里犯了一个业余错误。每个单独的序列被加载到一个形状为 (10, 1, 224, 224, 3) 的 numpy 数组中,其中第一个轴是序列中的项目数(它们被填充为相同的长度),第二个是批次大小,其他的只是一个 RGB 图像。根据我阅读有关文档(和我的错误)的可用信息的理解,时间分布式包装器内的 conv2D 采用 5D 数组,本质上被格式化为(批量大小、行、列、通道)的正常 conv2D 输入加上添加的时间维度(序列中的每个项目)。这是否接近准确?
继续我面临的问题... 如果我尝试输入形状为 (10, 1, 224, 224, 3) 的图像序列,则会出现错误 “ValueError:输入通道数与过滤器的相应维度不匹配,224!= 3”。任何人都可以对此有所了解吗?我相当确定我没有正确塑造输入数组和 input_shape。
另一个我可能有人能回答的问题是: 一旦解决了这个问题并且我可以使用该序列作为输入,我该如何为模型提供不仅仅是如上所示的单个图像序列,而是使用序列数组?我的数据集由数千个这样的序列组成。我以前在这方面的所有经验都是使用 Caffe,当然没有使用循环模型,所以我不仅不熟悉实际实现循环网络,而且我对 Keras 整体不熟悉(尽管我开始学习,虽然慢慢地哈哈)。根据我的经验和观察,Caffe 在你和数据输入之间提供了一个沉重的抽象层,所以我以前从来没有处理过这个问题。
我希望这个问题和我的问题清晰简洁,非常感谢您提供的任何信息!
【问题讨论】:
标签: python tensorflow machine-learning neural-network keras