45.自编码器

自编码器是一种神经网络,它的输入与输出是一致的

它包含两个部分,第一部分是编码器(Encoder),第二部分是解码器(Decoder),编码器把图像转换为向量,解码器是将向量再转换为图像

下面我们使用手写数字数据集mnist创建自编码器

目录

1  导入库

2  加载数据集

3  训练整体自编码器

3.1  编码过程

3.2  解码过程

4  只训练编码过程

5  只训练解码过程

6  测试编码与解码


1  导入库

2  加载数据集

由于我们这里只要图像,所以他们的label我们随便给一个,我们看一下x_train与x_test的shape

我们可以看到图像大小都是(28,28),数量分别是60000与10000

之后我们把图像内容转换为向量,这里我们使用reshape

我们再看一下x_train与x_test的shape

发现数量没变,第二个维度变为784(28x28)

之后我们将x_train与x_test转换为float32格式,并对其进行归一化

3  训练整体自编码器

我们现在的向量长度为784,我们想将其压缩为32,然后再将其转换为784,所以我们下面定义三个变量

我们使用函数式API创建自编码器,首先我们定义输入

3.1  编码过程

由长度为784的向量转变为长度为32的向量

3.2  解码过程

由长度为32的向量转变为长度为784的向量,由于我们的输入是进行过归一化的,取值范围在0-1之间,所以这里我们使用激活函数为sigmoid

定义完上面三个过程我们将其组合起来

之后我们对其进行编译,训练,保存

训练的速度很快,我们看一下最后几个epoch的结果

发现后面的几个epoch已经将loss讲到一个很低的值,说明这个模型还是可以的

4  只训练编码过程

只训练编码过程outputs截至到encode这一步即可,我们基于刚刚训练的all_autoencoder.h5保存只有编码过程的encode.h5

5  只训练解码过程

  • 这里的输入层用的是新创建的层

6  测试编码与解码

首先我们先进行编码

先对x_test数据进行处理,之后读取编码模型并进行预测,预测之后的结果是展示不出来的,所以我们只能看一下它的shape

发现第二个维度确实是32,那么代表它的维度是正确的

之后我们进行解码,我们使用上面的encode_result进行解码

解码的结果是可以绘制出来的,我们画出来看一下

上面的一行是test的原图像,下面的一行是编码后解码的图像,我们看到是模糊了些,但是大致相似

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值