图片的自动编码很容易就想到用卷积神经网络做为编码-解码器。在实际的操作中,
也经常使用卷积自动编码器去解决图像编码问题,而且非常有效。 下面通过**keras**完成简单的卷积自动编码。 编码器有堆叠的卷积层和池化层
(max pooling用于空间降采样)组成。 对应的解码器由卷积层和上采样层组成。
@requires_authorization
# -*- coding:utf-8 -*-from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras import backend as K
import os## 网络结构 ##input_img = Input(shape=(28,28,1)) # Tensorflow后端, 注意要用channel_last
# 编码器部分
x = Conv2D(16, (3,3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2,2), padding='same')(x)
x = Conv2D(8,(3,3), activation='relu', padding='same')(x)
x = MaxPooling2D((2,2), padding='same')(x)
x = Conv2D(8, (3,3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2,2), padding='same')(x)# 解码器部分
x = Conv2D(8, (3,3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3,3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')# 得到编码层的输出
encoder_model = Model(inputs=autoencoder.input, outputs=autoencoder.get_layer('encoder_out').output)## 导入数据, 使用常用的手写识别数据集
def load_mnist(dataset_name):
'''
load the data
'''data_dir = os.path.join("./data", dataset_name)f = np.load(os.path.join(data_dir, 'mnist.npz'))train_data = f['train'].TtrX = train_data.reshape((-1, 28, 28, 1)).astype(np.float32)trY = f['train_labels'][-1].astype(np.float32)test_data = f['test'].TteX = test_data.reshape((-1, 28, 28, 1)).astype(np.float32)teY = f['test_labels'][-1].astype(np.float32)# one-hot # y_vec = np.zeros((len(y), 10), dtype=np.float32)# for i, label in enumerate(y):#     y_vec[i, y[i]] = 1# keras.utils里带的有one-hot的函数, 就直接用那个了return trX / 255., trY, teX/255., teY# 开始导入数据
x_train, _ , x_test, _= load_mnist('mnist')# 可视化训练结果, 我们打开终端, 使用tensorboard
# tensorboard --logdir=/tmp/autoencoder # 注意这里是打开一个终端, 在终端里运行# 训练模型, 并且在callbacks中使用tensorBoard实例, 写入训练日志 http://0.0.0.0:6006
from keras.callbacks import TensorBoard
autoencoder.fit(x_train, x_train,epochs=50,batch_size=128,shuffle=True,validation_data=(x_test, x_test),callbacks=[TensorBoard(log_dir='/tmp/autoencoder')])# 重建图片
import matplotlib.pyplot as plt
decoded_imgs = autoencoder.predict(x_test)
encoded_imgs = encoder_model.predict(x_test)
n = 10
plt.figure(figsize=(20, 4))
for i in range(n):k = i + 1# 画原始图片ax = plt.subplot(2, n, k)plt.imshow(x_test[k].reshape(28, 28))plt.gray()ax.get_xaxis().set_visible(False)# 画重建图片ax = plt.subplot(2, n, k + n)plt.imshow(decoded_imgs[i].reshape(28, 28))plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)
plt.show()# 编码得到的特征
n = 10
plt.figure(figsize=(20, 8))
for i in range(n):k = i + 1ax = plt.subplot(1, n, k)plt.imshow(encoded[k].reshape(4, 4 * 8).T)plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)
plt.show()                

keras自动编码器实现系列之卷积自动编码器相关推荐

  1. R语言使用keras包实现卷积自动编码器模型(Convolutional Autoencoder)、加载keras自带的mnist数据集、训练中动态生成每个epoch后模型训练的loss曲线

    R语言使用keras包实现卷积自动编码器模型(Convolutional Autoencoder).加载keras自带的mnist数据集.训练中动态生成每个epoch后模型训练的loss曲线 目录

  2. 吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例

    吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例 (本笔记部分内容直接引用redstone的笔记http://redstonewill.com/1240/.原文整理的非常好,引入并添加我自 ...

  3. 神经网络学习小记录26——Keras 利用efficientnet系列模型搭建yolov3目标检测平台

    神经网络学习小记录26--Keras 利用efficientnet系列模型搭建efficientnet-yolov3目标检测平台 学习前言 什么是EfficientNet模型 源码下载 Efficie ...

  4. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  5. 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码

    一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...

  6. keras搬砖系列-残差网络的实现

    keras搬砖系列-残差网络的实现 ResNet-50图 #coding=utf-8 from keras.models import Model from keras.layers import I ...

  7. 好像还挺好玩的GAN2——Keras搭建DCGAN利用深度卷积神经网络实现图片生成

    好像还挺好玩的GAN2--Keras搭建DCGAN利用深度卷积神经网络实现图片生成 注意事项 学习前言 什么是DCGAN 神经网络构建 1.Generator 2.Discriminator 训练思路 ...

  8. 基于 MNIST 数据集的 Pytorch 卷积自动编码器

    自编码器 自动编码器是一种无监督的深度学习算法,它学习输入数据的编码表示,然后重新构造与输出相同的输入.它由编码器和解码器两个网络组成.编码器将高维输入压缩成低维潜在代码(也称为潜在代码或编码空间) ...

  9. cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...

    上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from kera ...

最新文章

  1. .NET 正则表达式’$’符号的使用
  2. Linux下禁止别人ping自己服务器的方法
  3. excel调用python编程-使用Python对Excel进行读写操作
  4. Vue之element table 后端排序实现
  5. aws终止实例后还收费吗_因 AWS 数据中心断电,1TB 数据丢失了
  6. MFC中SQLite数据库的使用
  7. LeetCode-8-String to Integer (atoi)
  8. 洛谷—— P2658 汽车拉力比赛
  9. 文件已被其他应用程序锁定该怎么解决
  10. 计算机打开查看方式默认是什么样,win10图片打开方式里没有默认照片查看器的解决方法...
  11. 主机防火墙与访问控制
  12. 解决ImportError: cannot import name ‘soft_unicode‘ from ‘markupsafe‘
  13. 深度学习目标检测方法汇总
  14. SpringBoot实现CRUD
  15. 免费音视频格式转换软件
  16. Cordova中第三方UI插件的使用(2)--Topcoat
  17. Earth Engine下水体提取
  18. 如何使用#define_CRT_SECURE_NO_WARNINGS
  19. 金蝶erp与易飞erp区别_文化问题:敏捷和ERP第三部分
  20. 蓝牙开发(二)扫描设备

热门文章

  1. 三相电 三相 插座 插头 线缆 颜色 详解 图解
  2. Elasticsearch:Search-as-you-type 字段类型
  3. WebStorm快捷键以及个人设置
  4. Nature子刊 | 神经义肢技术:从感觉运动到认知障碍(上)
  5. TCP、UDP常用端口(转自wiki)
  6. GEE:如何直接下载指定投影坐标系的遥感影像?(附投影坐标系查询网站)
  7. 图像增强学习笔记(三) | 图像锐化
  8. □ 影片名:《木乃伊》(5156) 在线播放
  9. oracle查询24小时制,oracle按小时查询显示数据
  10. 玻尔兹曼常数自动仿真测试的程序分析