tensorflow - 如何在 keras 中创建滑动二维自动编码器?
问题描述
我正在开发一个针对 MNIST 数据集的玩具 Keras/Tensorflow 项目。我想构建类似于 2D 卷积网络的东西,但我想生成一个密集的向量表示,而不是一堆过滤器。
这是我用来为输入的 3x3 子样本创建自动编码器的模型示例:
model = Sequential()
model.add(Flatten(input_shape=(3, 3)))
model.add(Dense(32, activation='elu'))
model.add(Dense(4, activation='elu'))
model.add(Dense(32, activation='elu'))
model.add(Dense(9, activation='sigmoid'))
model.add(Reshape((3, 3)))
使用这个模型,我知道拓扑接近于我的 3x3 内核。我想弄清楚的是如何在我的 2D 图像上复制/平铺该模型的前三层。我想拥有 Conv2d 层的所有功能,例如步幅/填充,但我不清楚是否/如何用整个多层“子模型”替换该层的内核。
我想要的一些属性:
- “内核”需要在平铺实例之间共享,这样我们只需要训练一个内核。
- 不管我们如何定义这个内核,如果它可以在 keras 层中表示就好了
- 它具有 Conv2d 的所有采样功能,例如填充/步幅/扩张
我尝试过的一些事情:
- Keras Conv2D 自定义内核初始化- 似乎需要将内核缩减为单个张量?
- 使用
K.tile
但这似乎需要我重新实现 Conv2d 的大部分内容,并且不清楚创建的变量是共享的还是新的实例
解决方案
你很幸运,因为有一个tensorflow
函数可以完全满足你的要求。你正在寻找tf.image.extract_patches
. 您可以将其放在一个tf.keras.layers.Lambda
层中以将其包裹在tf.keras.layer.Layer
. 一种更清洁的方法是tf.keras.layers.Layer
,但它需要更多的努力。有关如何执行此操作的更多信息,请参阅文档tf.keras.layers.Lamba
推荐阅读
- html - 限制引导页面的总宽度?
- mysql - 当 LIKE 条件包含多个非通配符时,准备查询无法返回结果
- python - Tensorflow CUDA - CUPTI 错误:无法加载 CUPTI 或找不到符号
- python - 如何在python中用漂亮的汤从div中find_all(id)
- python - Python:Selenium“没有这样的元素”XPath 或 ID
- excel - IF 语句在一个单元格中返回多个值
- c# - 正确使用 AesCryptoServiceProvider
- bash - 在我的 .bash_profile 中正确格式化 PYTHONPATH
- spring - 如何限制对 Spring MVC 控制器的访问
- java - 方法 java.io.File# 的模棱两可的方法重载#
. 在 React Native 中