拓端tecdat|使用Python和Keras进行主成分分析、神经网络构建图像重建
原文链接:http://tecdat.cn/?p=8417
原文出处:拓端数据部落公众号
介绍
如今,几乎我们使用的每个应用程序中都有大量数据- 听音乐, 浏览朋友的图像,或者 观看新的预告片
对于单个用户来说这不是问题。但是,想象一下同时处理成千上万的请求(如果不是上百万)具有大数据的请求。必须以某种方式减少这些数据流,以便我们能够物理上将其提供给用户-这就是数据压缩的开始。
压缩技术很多,它们的用法和兼容性也各不相同。
压缩有两种主要类型:
- 无损:即使我们不太“精打细算”,数据完整性和准确性也是首选
- 有损:数据完整性和准确性并不像我们提供服务的速度那么重要-想象一下实时视频传输,其中“实时”传输比拥有高质量视频更为重要
例如,使用Autoencoders,我们可以分解此图像并将其表示为下面的32矢量代码。使用它,我们可以重建图像。当然,这是有损压缩的一个示例,因为我们已经丢失了很多信息。
不过,我们可以使用完全相同的技术,通过为表示分配更多的空间来更精确地做到这一点:
Keras是一个Python框架,可简化神经网络的构建。
首先,让我们使用pip安装Keras:
$ pip install keras
预处理数据
同样,我们将使用LFW数据集。像往常一样,对于此类项目,我们将对数据进行预处理 。
为此,我们将首先定义几个路径 :
ATTRS_NAME = "lfw_attributes.txt" IMAGES_NAME = "lfw-deepfunneled.tgz" RAW_IMAGES_NAME = "lfw.tgz"
然后,我们将使用两个函数-一个将原始矩阵转换为图像并将颜色系统更改为RGB:
def decode_image_from_raw_bytes(raw_bytes):img = cv2.imdecode(np.asarray(bytearray(raw_bytes), dtype=np.uint8), 1)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)return img
另一个是实际加载数据集并使其适应我们的需求:
实施
我们的数据X
以3D矩阵的形式存在于矩阵中,这是RGB图像的默认表示形式。通过提供三个矩阵-红色,绿色和蓝色,这三个矩阵的组合产生了图像颜色。
这些图像的每个像素将具有较大的值,范围从0到255。通常,在机器学习中,我们倾向于使值较小,并以0为中心,因为这有助于我们的模型更快地训练并获得更好的结果,因此让我们对图像进行归一化:
X = X.astype('float32') / 255.0 - 0.5
现在,如果我们测试X
数组的最小值和最大值,它将是-.5
和.5
,您可以验证:
print(X.max(), X.min())
0.5 -0.5
为了能够看到图像,让我们创建一个show_image
函数。0.5
由于像素值不能为负,它将添加到图像中:
现在,让我们快速浏览一下我们的数据:
show_image(X[6])
现在让我们将数据分为训练和测试集:
sklearn train_test_split()
函数能够通过给它测试比率来分割数据,其余的当然是训练量。的random_state
,你会看到很多机器学习,用来产生相同的结果,不管你有多少次运行代码。
现在该模型了:
此函数将image_shape
(图像尺寸)和code_size
(输出表示的大小)作为参数。
从逻辑上讲,该值越小code_size
,图像将压缩得越多,但是保存的功能就越少,并且所复制的图像与原始图像的差异会更大。
由于网络体系结构不接受3D矩阵,因此该Flatten
层的工作是将(32,32,3)
矩阵展平为一维数组(3072
)。
现在,将它们连接在一起并开始我们的模型:
之后,我们通过Model
使用inp
和reconstruction
参数创建一个链接它们,并使用adamax
优化器和mse
损失函数对其进行编译。
在这里编译模型意味着定义其目标以及达到目标的方式。在我们的上下文中,目标是最小化,mse
并通过使用优化程序来达到此目的-从本质上讲,这是一种经过调整的算法,可以找到全局最小值。
结果:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) (None, 32, 32, 3) 0
_________________________________________________________________
sequential_3 (Sequential) (None, 32) 98336
_________________________________________________________________
sequential_4 (Sequential) (None, 32, 32, 3) 101376
=================================================================
Total params: 199,712
Trainable params: 199,712
Non-trainable params: 0
_________________________________________________________________
在这里我们可以看到输入是32,32,3。
隐藏层是32
,您看到的解码器输出是(32,32,3)
。
模型:
在本例中,我们将比较构造的图像和原始图像,因此x
和y
都等于X_train
。理想情况下,输入等于输出。
该epochs
变量定义多少次,我们要训练数据通过模型过去了,validation_data
是我们用来评估训练后的模型验证组:
Train on 11828 samples, validate on 1315 samples
Epoch 1/20
11828/11828 [==============================] - 3s 272us/step - loss: 0.0128 - val_loss: 0.0087
Epoch 2/20
11828/11828 [==============================] - 3s 227us/step - loss: 0.0078 - val_loss: 0.0071
.
.
.
Epoch 20/20
11828/11828 [==============================] - 3s 237us/step - loss: 0.0067 - val_loss: 0.0066
我们可以将 损失可视化,以获得 概述。
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
我们可以看到,在第三个时期之后,损失没有明显的进展。
这也可能导致模型过度拟合,从而使其在训练和测试数据集之外的新数据上的表现不佳。
现在,最令人期待的部分-让我们可视化结果:
def visualize(img,encoder,decoder):
”“绘制原始,编码和解码的图像”“”#img [None]的形状为(1、32、32、3),与模型输入相同code = encoder.predict(img[None])[0]reco = decoder.predict(code[None])[0]plt.subplot(1,3,1)plt.title("Original")show_image(img)plt.subplot(1,3,2)plt.title("Code")plt.imshow(code.reshape([code.shape[-1]//2,-1]))plt.subplot(1,3,3)plt.title("Reconstructed")show_image(reco)plt.show()for i in range(5):img = X_test[i]visualize(img,encoder,decoder)
现在,让我们增加code_size
至1000
:
我们刚刚做的就是主成分分析(PCA),这是一种降维技术。我们可以通过生成较小的新功能来使用它来减小功能集的大小,但是仍然可以捕获重要信息。
主成分分析是 一种非常流行的用法。
图像去噪
另一种流行用法是去噪。让我们在图片中添加一些随机噪声:
def apply_gaussian_noise(X, sigma=0.1):noise = np.random.normal(loc=0.0, scale=sigma, size=X.shape)return X + noise
在这里,我们从标准正态分布中添加了一些随机噪声,其大小为sigma
,默认为0.1
。
作为参考,这是具有不同sigma
值的噪声的样子:
plt.subplot(1,4,1)
show_image(X_train[0])
plt.subplot(1,4,2)
show_image(apply_gaussian_noise(X_train[:1],sigma=0.01)[0])
plt.subplot(1,4,3)
show_image(apply_gaussian_noise(X_train[:1],sigma=0.1)[0])
plt.subplot(1,4,4)
show_image(apply_gaussian_noise(X_train[:1],sigma=0.5)[0])
正如我们所看到的,几乎看不到图像的sigma
增加0.5
。我们将尝试从σ为的嘈杂图像中再生原始图像0.1
。
我们将为此生成的模型与之前的模型相同,尽管我们将进行不同的训练。这次,我们将使用原始和相应的噪点图像对其进行训练:
现在让我们看一下模型结果:
结论
主成分分析,这是一种降维技术,图像去噪等。
最受欢迎的见解
1.使用opencv在python中进行图像处理的简介
2.matlab中的偏最小二乘回归(plsr)和主成分回归(pcr)
3.matlab中使用vmd变分模态分解
4.matlab使用hampel滤波去除异常值
5.matlab使用经验模式分解emd-对信号进行去噪
6.matlab中的偏最小二乘回归(plsr)和主成分回归(pcr)
7.matlab使用copula仿真优化市场风险
8.r语言高级图像处理
9.matlab实现mcmc的马尔可夫切换arma-garch模型估计
拓端tecdat|使用Python和Keras进行主成分分析、神经网络构建图像重建相关推荐
- 拓端tecdat荣获掘金社区入驻新人奖
2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...
- 拓端tecdat荣获2022年度51CTO博主之星
相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...
- 拓端tecdat|bilibili视频流量数据潜望镜
最近我们被客户要求撰写关于bilibili视频流量的研究报告,包括一些图形和统计输出. 最新研究表明,中国有超过7亿人在观看在线视频内容.Bilibili,被称为哔哩哔哩或简称为B站,是中国大陆第二个 ...
- 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...
- 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...
- 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例
最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...
- 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险
最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...
- python时间序列如何拟合曲线_【Python】keras使用LSTM拟合曲线
keras生成的网络结构如下图: 代码如下: from sklearn.preprocessing import MinMaxScaler from keras.models import Seque ...
- 怎么装python的keras库_matlab调用keras深度学习模型(环境搭建)
matlab没有直接调用tensorflow模型的接口,但是有调用keras模型的接口,而keras又是tensorflow的高级封装版本,所以就研究一下这个--可以将model-based方法和le ...
- Keras【Deep Learning With Python】—Keras基础
文章目录 1.关于Keras 2.Keras的模块结构 3.使用Keras搭建一个神经网络 4. 主要概念 5.第一个示例 下载网站数据注意 1.关于Keras 1)简介 Keras是由纯python ...
最新文章
- centos使用boost过程
- APK安装错误和解决方法
- 机房布线的最高境界......
- TIOBE 2021年3月程序语言排名 - python要超越Java排第二了?
- linux系统 锐捷_基于802.1x的锐捷linux客户端认证方法(最新)
- 想知道PDF转Word软件哪个好?向你推荐3个自用软件
- 明尼苏达双城大学计算机排名,明尼苏达大学双城分校排名
- 【281期】面试官问:淘宝七天自动确认收货,可以怎么实现?
- 解决element 表单验证不通过的俩大坑
- 总结一些IT项目经理的管理方法与经验
- 去日本东京旅行(1)-- 机场篇
- 找不到位于wsd扫描的计算机,在基于 Windows 的计算机上单击新扫描 Windows 传真和扫描时出现错误消息...
- python 画椭圆_一篇文章教会你使用SVG ellipse 画椭圆
- [论文阅读]《Using Conditional Functional Dependency to Discover Abnormal Data in RDF Graphs》阅读笔记
- 圆珠笔芯为什么那么细
- 数据科学和机器学习中的优化理论与算法(上)
- Re: 一著名软件公司的java笔试算法题!
- element搜索框实现数据搜索
- 【编程书籍 大系】 计算机开放电子书汇总
- 常见html的标题含义(1)
热门文章
- 批量插入数据到sqlserver
- 推荐一本书(Secure Coding Standard for Java)
- php null空值(转)
- 深入了解 HTML 5
- 3月3 pytorch模型保存的.pt, .pth, .pkl的pytorch模型文件,只是后缀不同而已(仅此而已)
- Windows XP pro with sp2(x64)VOL版(英文原版)光盘镜像 + 简繁中文语言包 + 有效安装密钥 一些网友都有这样的困惑,Windows XP sp3在安装
- Pytorch模型参数的访问、初始化和共享
- 2019.6.18 区块链论文翻译
- 关于如果减少勒索病毒的侵扰:
- 在 Windows 7 中安装和使用Windows XP Mode