当前位置: 首页 > 编程日记 > 正文

tensorflow生成对抗网络

import tensorflow as tf
import numpy as np
import os
from tensorflow.examples.tutorials.mnist import input_data
from matplotlib import pyplot as pltBATCH_SIZE = 64
UNITS_SIZE = 128
LEARNING_RATE = 0.001
EPOCH = 300
SMOOTH = 0.1print("mnist手写体生成对抗网络示例.")
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True)# 生成模型
def generatorModel(noise_img, units_size, out_size, alpha=0.01):with tf.variable_scope('generator'):FC = tf.layers.dense(noise_img, units_size)reLu = tf.nn.leaky_relu(FC, alpha)drop = tf.layers.dropout(reLu, rate=0.2)logits = tf.layers.dense(drop, out_size)outputs = tf.tanh(logits)return logits, outputs# 判别模型
def discriminatorModel(images, units_size, alpha=0.01, reuse=False):with tf.variable_scope('discriminator', reuse=reuse):FC = tf.layers.dense(images, units_size)reLu = tf.nn.leaky_relu(FC, alpha)logits = tf.layers.dense(reLu, 1)outputs = tf.sigmoid(logits)return logits, outputs# 损失函数
"""
判别器的目的是:
1. 对于真实图片,D要为其打上标签1
2. 对于生成图片,D要为其打上标签0
生成器的目的是:对于生成的图片,G希望D打上标签1
"""def loss_function(real_logits, fake_logits, smooth):# 生成器希望判别器判别出来的标签为1; tf.ones_like()创建一个将所有元素都设置为1的张量G_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=fake_logits,labels=tf.ones_like(fake_logits)*(1-smooth)))# 判别器识别生成器产出的图片,希望识别出来的标签为0fake_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=fake_logits,labels=tf.zeros_like(fake_logits)))# 判别器判别真实图片,希望判别出来的标签为1real_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=real_logits,labels=tf.ones_like(real_logits)*(1-smooth)))# 判别器总lossD_loss = tf.add(fake_loss, real_loss)return G_loss, fake_loss, real_loss, D_loss# 优化器
def optimizer(G_loss, D_loss, learning_rate):train_var = tf.trainable_variables()G_var = [var for var in train_var if var.name.startswith('generator')]D_var = [var for var in train_var if var.name.startswith('discriminator')]# 因为GAN中一共训练了两个网络,所以分别对G和D进行优化G_optimizer = tf.train.AdamOptimizer(learning_rate).minimize(G_loss, var_list=G_var)D_optimizer = tf.train.AdamOptimizer(learning_rate).minimize(D_loss, var_list=D_var)return G_optimizer, D_optimizer# 训练
def train(mnist):image_size = mnist.train.images[0].shape[0]real_images = tf.placeholder(tf.float32, [None, image_size])fake_images = tf.placeholder(tf.float32, [None, image_size])#调用生成模型生成图像G_outputG_logits, G_output = generatorModel(fake_images, UNITS_SIZE, image_size)# D对真实图像的判别real_logits, real_output = discriminatorModel(real_images, UNITS_SIZE)# D对G生成图像的判别fake_logits, fake_output = discriminatorModel(G_output, UNITS_SIZE, reuse=True)# 计算损失函数G_loss, real_loss, fake_loss, D_loss = loss_function(real_logits, fake_logits, SMOOTH)# 优化G_optimizer, D_optimizer = optimizer(G_loss, D_loss, LEARNING_RATE)saver = tf.train.Saver()step = 0with tf.Session() as session:session.run(tf.global_variables_initializer())for epoch in range(EPOCH):for batch_i in range(mnist.train.num_examples // BATCH_SIZE):batch_image, _ = mnist.train.next_batch(BATCH_SIZE)# 对图像像素进行scale,tanh的输出结果为(-1,1)batch_image = batch_image * 2 -1# 生成模型的输入噪声noise_image = np.random.uniform(-1, 1, size=(BATCH_SIZE, image_size))#session.run(G_optimizer, feed_dict={fake_images:noise_image})session.run(D_optimizer, feed_dict={real_images: batch_image, fake_images: noise_image})step = step + 1# 判别器D的损失loss_D = session.run(D_loss, feed_dict={real_images: batch_image, fake_images:noise_image})# D对真实图片loss_real =session.run(real_loss, feed_dict={real_images: batch_image, fake_images: noise_image})# D对生成图片loss_fake = session.run(fake_loss, feed_dict={real_images: batch_image, fake_images: noise_image})# 生成模型G的损失loss_G = session.run(G_loss, feed_dict={fake_images: noise_image})print('epoch:', epoch, 'loss_D:', loss_D, ' loss_real', loss_real, ' loss_fake', loss_fake, ' loss_G', loss_G)model_path = os.getcwd() + os.sep + "mnist.model"saver.save(session, model_path, global_step=step)def main(argv=None):train(mnist)if __name__ == '__main__':#tf.app.run()main()   

相关文章:

博客园今天早上是不是出现什么问题了?

下面是我进我的blog后台管理和浏览博客园给出的提示。大约几分钟后恢复正常。转载于:https://www.cnblogs.com/freeyzh/archive/2004/12/01/71269.html

模态框获取id一直不变,都是同一个id值

2019独角兽企业重金招聘Python工程师标准>>> $(.refund-btn).click(function(){//此处必须是$(this),否则$(.refund-btn)重新获取,导致值一直不变var id $(this).attr(data-id);//var id $(.refund-btn).attr(data-id);错误,这样会导致一直…

标准功能模块组件 -- 内部联络单组件,内部邮件组件,提高多人异地协同办公效率...

为什么80%的码农都做不了架构师?>>> 未必什么功能都需要自己开发,我们不会自己开发一个数据库系统,也不会自己开发一个操作系统,同样我们每个功能模块都未必需要自己开发,自己开发最核心的模块&#xff0c…

Microsoft patterns practices Enterprise Library released

一直关注这个东西,本来订阅了RSS,没想到GotDotNet上面的发布信息给清空了。 上周末发布的,今天才看到,刚刚下载了一个,下载还要求注册,真麻烦,现把地址共享,方便大家。 http://down…

图论之拓扑排序 poj 2367 Genealogical tree

题目链接 http://poj.org/problem?id2367 题意就是给定一系列关系&#xff0c;按这些关系拓扑排序。 #include<cstdio> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; const int maxn200; int…

算法基础知识科普:8大搜索算法之顺序搜索

基本概念和术语 搜索表&#xff08;Search Table&#xff09;&#xff1a;是由同一类型的数据元素&#xff08;或记录&#xff09;构成的集合。 关键字&#xff08;Key&#xff09;&#xff1a;是数据元素中某个数据项的值&#xff0c;用它可以标识一个数据元素。若此关键字…

foj2024

为什么80%的码农都做不了架构师&#xff1f;>>> http://acm.fzu.edu.cn/problem.php?pid2024 View Code #include < stdio.h > #include < string .h > #define M 1010 int c[M][M]; int f[M][M]; int min( int a, int b, int c){ int z …

4701年新年快乐!

中华民族传统历法夏历&#xff08;农历&#xff09;采用的是干支纪年法&#xff0c;是世界上最古老的历法之一。干支即“六十甲子”&#xff0c;以60年为一循环。它的纪元开始相传可追溯到黄帝轩辕氏时代&#xff0c;按公元计算&#xff0c;第一个“甲子年”应是在公元前2697年…

Win10系列:JavaScript访问文件和文件夹

在实际开发中经常会遇到访问文件的情况&#xff0c;因此学习与文件有关的操作对程序开发很有帮助&#xff0c;关于文件操作的一些基本技术&#xff0c;在前面章节中有专门基于C#语言的详细讲解&#xff0c;本节主要介绍如何使用HTML5和JavaScript开发具有文件操作功能的Windows…

算法基础知识科普:8大搜索算法之二分搜索

昨天介绍了对无序搜素表的顺序搜索方法&#xff0c;今天介绍对有序搜索表的二分搜索方法&#xff0c;“二分”在算法设计中是非常常用的一种思想&#xff0c;除了处理如下普通的搜索外&#xff0c;还用于搜索方程的解等工程领域。但二分法仍然有缺陷&#xff0c;待后面慢慢介绍…

linux之shell脚本学习篇一

为什么80%的码农都做不了架构师&#xff1f;>>> 此文包含脚本服务请求&#xff0c;字符串截取&#xff0c;文件读写内容&#xff0c;打印内容换行。 #!/bin/bash retMsg""; while read LINE do echo "this is text: $LINE"; retMsg/usr/bin/cu…

Win10系列:JavaScript动画2

"重新定位"动画也是Windows动画库中的动画效果。"重新定位"动画的动画效果是指一个或一组元素移动到新的位置时&#xff0c;这些元素不是突然出现在新的位置&#xff0c;而是从一个位置移动到另一个位置。 创建"重新定位"动画可以使用WinJS.UI.A…

[转载]李开复先生给中国学生的第四封信:大学四年应是这样度过

今天&#xff0c;我回复了“开复学生网”开通以来的第1000个问题。关掉电脑后&#xff0c;始终有一封学生来信萦绕在我的脑海里&#xff0c;挥之不去&#xff1a; 开复老师&#xff1a; 就要毕业了。 回头看自己所谓的大学生活&#xff0c; 我想哭&#xff0c;不是因为离别&…

算法基础知识科普:8大搜索算法之插补搜索

二分法的不足在于&#xff0c;对于均匀分布的数据&#xff0c;缩小搜索范围的速度太慢&#xff0c;每次只能缩小原长度的1/2&#xff0c;我们希望缩小范围尽可能的快&#xff0c;即搜索的数据若离左端点近&#xff0c;搜索的区间尽量的靠近左端点&#xff0c;同理搜索的数据若离…

hdu(1596)

为什么80%的码农都做不了架构师&#xff1f;>>> dijkstra 1 #include " iostream " 2 using namespace std; 3 double map[ 1010 ][ 1010 ]; 4 int visit[ 1010 ]; 5 double used[ 1010 ]; 6 int k; 7 double _max 0 ; 8 int i…

使用ADO.NET 的最佳实践(zz)

数据访问&#xff1a;使用 ADO.NET 的最佳实践&#xff08;ADO.NET 技术文档&#xff09; 发布日期&#xff1a; 4/1/2004| 更新日期&#xff1a; 4/1/2004 摘要&#xff1a;编写 Microsoft ADO.NET 代码的最佳实践&#xff0c;以及对使用 ADO.NET 中可用对象的开发人员的建议。…

算法基础知识科普:8大搜索算法之二叉搜索树(上)

前几天&#xff0c;我们介绍了在顺序存储结构上构建的搜索算法&#xff0c;如二分搜素&#xff0c;插补搜索等&#xff0c;这种结构适合于静态搜索&#xff0c;但对于动态搜索会涉及到大量记录的移动导致效率的降低。这样我们自然会想是否能够利用链式的存储结构&#xff0c;这…

如何查看 oracle 官方文档

Concept 包含了 oracle 数据库里面的一些基本概念和原理, 比如 数据库逻辑结构, 物理结构, 实例结构, 优化器, 事务等. PDF 460页 Reference 包含了动态性能视图, 数据字典, 初始化参数等, 如果有参数不知道意思, 或者 v$视图字段信息模糊, 都可以从这里找到描述, 使用 html版的…

php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理)

php开发面试题---攻击网站的常用手段有哪些&#xff0c;及如何预防&#xff08;整理&#xff09; 一、总结 一句话总结&#xff1a; 比较记忆&#xff1a;注意比较各种攻击的区别&#xff0c;比如csrf和xss&#xff0c;以及xss和sql&#xff0c;这样才能记住 1、Sql注入是什么&…

利用Event和MapFile进程共享信息

工作过程: 进程一, 建立映射文件,填写数据,并发出Event的信号; 进程二,打开映射文件,收到Event的信号时读取数据. #include <windows.h>#include <string.h>#include <iostream>usingnamespacestd; #defineFILE_SIZE 1024staticHANDLE hMapFile; staticLPVOI…

算法基础知识科普:8大搜索算法之二叉搜索树(中)

昨天图文介绍了二叉搜索树的基本概念&#xff0c;本篇图文介绍二叉搜索树的具体实现。既然二叉搜索树是二叉树的特殊应用&#xff0c;所以我们首先封装二叉树的结点&#xff0c;即数据-左子树-右子树&#xff0c;然后实现ISymbolTalbe接口中的方法&#xff0c;我们知道二叉搜索…

PropertiesFactoryBean PropertyPlaceholderConfigurer 区别

为什么80%的码农都做不了架构师&#xff1f;>>> 1.PropertiesFactoryBean is a FactoryBean implementation which reads a properties file and exposes that as an Properties object in the applicationcontext. 加载配置文件后&#xff0c;可以在代码中通过注…

MySQL索引背后的数据结构及算法原理【转】

http://blog.codinglabs.org/articles/theory-of-mysql-index.htmlMySQL索引背后的数据结构及算法原理【转】摘要本文以MySQL数据库为研究对象&#xff0c;讨论与数据库索引相关的一些话题。特别需要说明的是&#xff0c;MySQL支持诸多存储引擎&#xff0c;而各种存储引擎对索引…

各种播放器代码

各种播放器代码1.avi格式代码片断如下&#xff1a;<object id"video"width"400"height"200"border"0"classid"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"><param name"ShowDisplay"value"0"…

算法基础知识科普:8大搜索算法之二叉搜索树(下)

由于微信发代码以及数学符号很吃力&#xff0c;所以我们做知识科普只能利用图片来做&#xff0c;本算法代码较多&#xff0c;所以分为三个部分来介绍。本篇把剩余的部分补齐。当然二叉搜索树也有自己的缺陷&#xff0c;即构造的二叉树跟数据的初始状态以及删除的方法有很大的关…

SpringMvc4中获取request、response对象的方法

springMVC4中获取request和response对象有以下两种简单易用的方法&#xff1a; 1、在control层获取 在control层中获取HttpServletRequest和HttpServletResponse对象有以下两种简单方式&#xff1a; 1&#xff09;通过方法参数直接在action类中获取 Controller class Action{ R…

JAVA增删改查XML文件

2019独角兽企业重金招聘Python工程师标准>>> 最近总是需要进行xml的相关操作。 不免的要进行xml的读取修改等&#xff0c;于是上网搜索&#xff0c;加上自己的小改动&#xff0c;整合了下xml的常用操作。 读取XML配置文件 首先我们需要通过DocumentBuilderFactory获…

测试一下,你能小学毕业吗?

昨天在群里大家讨论了上面那道小学六年级的五星题&#xff0c;不知道有没有同学能够不用三角函数&#xff0c;不用积分做出来的&#xff1f;先别往后看&#xff0c;测试一下吧&#xff01;看看是不是要跟小编一起重新背起小书包返回小学&#xff0c;重新学习了。 现在小学生的…

This is A PostXing Test

Test 一下下 试看看~~~ ABC试一下代码...1 public class PostApplicationExitActivationProcess2 {3 /// <summary>4 /// The main entry point for the application.5 /// </summary>6 [STAThread]7 static void Main( string[] args) 8 {9 if (…

缓存穿透、并发和失效的解决方案

我们在用缓存的时候&#xff0c;不管是Redis或者Memcached&#xff0c;基本上会通用遇到以下三个问题&#xff1a; 缓存穿透 缓存并发 缓存失效 缓存穿透 注&#xff1a;上面三个图会有什么问题呢&#xff1f; 我们在项目中使用缓存通常都是先检查缓存中是否存在&#xff0c;…