『TensorFlow』生成式网络中的图片预处理
简介
这里的生成式网络是广义的生成式,不仅仅指gan网络,还有风格迁移中的类自编码器网络,以及语义分割中的类自编码器网络,因为遇到次数比较多,所以简单的记录一下。
背景
1、像素和数字
图像处理目标一般就是RGB三色通道,原始图像解码后是0~255,这个矩阵传给matplotlib就可以直接绘图了,与此同0~1的图像matplotlib也是可以接受的,关于这点,我们来看看文档是怎么说的,
Elements of RGB and RGBA arrays represent pixels of an MxN image.
All values should be in the range [0 .. 1] for floats or
[0 .. 255] for integers. Out-of-range values will be clipped to
these bounds.
即使0~1也能够使用,我们常用的还是0~255的数据。
2、生成式网络输出的限制
生成式网络不同于分类网络,其输出的目标是图像,对照上面也就是0~255范围(这个更常用)的矩阵,这就意味着网络的输出有所限制的,且是不同于分类网络全部限制于0~1或者-1~1的,正如分类网络的sigmoid或者softmax一样,我们会在最后一个卷积/转置卷积层后采取一些操作保证输出满足图像的要求。
实际思路
输入图像为了保证可以被用于loss,需要和输出图像的值域相同,所以有两个思路:
- 输入图像值压缩到-1~1附近
- 输出图像值放大到0~255
gan网络中
我们采用方式为:原像素数据除以127.5减去1的操作,使得输出值保持在-1~1之间,可以配合sigmoid激活函数进行学习
实际测试一下,我们将这里的预处理(TFR_process.py)做一下调整,使得值不再被压缩,
'''图像预处理'''
# image_decode = tf.cast(image_decode, tf.float32)/127.5-1
image_decode = tf.cast(image_decode, tf.float32)
相应的将生成网络(DCGAN_function.py)作出调整,
h4 = deconv2d(h3, [batch_size, s_h, s_w, c_dim], scope='g_h4')
return h4 # tf.nn.tanh(h4)
可以看到结果依旧可以训练出来,效果如下。
快速风格迁移中
我们采用0~255作为输入,生成数据仍为0~255(主要分布),然后将输出数据进一步操作,送入vgg进行loss计算。
此时的生成式网络最后一层可以不加激活,输出会自行收敛在目标附近,也可以tanh激活(-1~1)后加1再乘127.5。
最新文章
- [LeetCode] 452 Minimum Number of Arrows to Burst Balloons
- 修改thinkphp路由模式,去掉Home
- 山峰(codevs 1531)
- HTML Questions:Front-end Developer Interview Questions
- 利用ioctl()获取无线速率
- jQuery弹出层_点击自身以外地方关闭弹出层
- iCIBA简单案例
- UBUNTU 下如何升级 gcc, g++
- 深入分析redis cluster 集群
- Vultr日本vps搭建ss/ssr/openvpn免流教程
- 3.5 find() 判断是否存在某元素
- Nginx-Tomcat搭建负载均衡(转载)
- Salesforce 数据备份和恢复小知识
- Go语言数据类型
- OpenMP初探
- 网站访问者UA检测及跳转
- Qt数据库_资料
- 项目经验总结-twice
- Python len() 方法
- Java 线程池Future和FutureTask
热门文章
- 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程
- go 依赖工具glide
- 【ASP.NET】System.Web.Routing - HttpMethodConstraint Class
- 【译】第12节---数据注解-ConcurrencyCheck
- 【Python】【网络编程】
- 前端调用后端接口下载excel文件的几种方式
- _equipment
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) D. Office Keys time limit per test2 seconds 二分
- CentOS6.5下搭建SVN服务器
- 小程序模板template