from __future__ import division
import os
import time
from glob import glob
from collections import namedtuple
from module import *
from utils import *
class cyclegan(object):
def __init__(self, sess, args):
self.sess = sess
self.batch_size = args.batch_size
self.image_size = args.fine_size
self.input_c_dim = args.input_nc
self.output_c_dim = args.output_nc
self.L1_lambda = args.L1_lambda
self.dataset_dir = args.dataset_dir
self.discriminator = discriminator
if args.use_resnet:
self.generator = generator_resnet
else:
self.generator = generator_unet
if args.use_lsgan:
self.criterionGAN = mae_criterion
else:
self.criterionGAN = sce_criterion
OPTIONS = namedtuple('OPTIONS', 'batch_size image_size \
gf_dim df_dim output_c_dim is_training')
self.options = OPTIONS._make((args.batch_size, args.fine_size,
args.ngf, args.ndf, args.output_nc,
args.phase == 'train'))
self._build_model()
self.saver = tf.train.Saver()
self.pool = ImagePool(args.max_size)
def _build_model(self):
self.real_data = tf.placeholder(tf.float32,
[None, self.image_size, self.image_size,
self.input_c_dim + self.output_c_dim],
name='real_A_and_B_images')
self.real_A = self.real_data[:, :, :, :self.input_c_dim]
self.real_B = self.real_data[:, :, :, self.input_c_dim:self.input_c_dim + self.output_c_dim]
self.fake_B = self.generator(self.real_A, self.options, False, name="generatorA2B")
self.fake_A_ = self.generator(self.fake_B, self.options, False, name="generatorB2A")
self.fake_A = self.generator(self.real_B, self.options, True, name="generatorB2A")
self.fake_B_ = self.generator(self.fake_A, self.options, True, name="generatorA2B")
self.DB_fake = self.discriminator(self.fake_B, self.options, reuse=False, name="discriminatorB")
self.DA_fake = self.discriminator(self.fake_A, self.options, reuse=False, name="discriminatorA")
self.g_loss_a2b = self.criterionGAN(self.DB_fake, tf.ones_like(self.DB_fake)) \
+ self.L1_lambda * abs_criterion(self.real_A, self.fake_A_) \
+ self.L1_lambda * abs_criterion(self.real_B, self.fake_B_)
self.g_loss_b2a = self.criterionGAN(self.DA_fake, tf.ones_like(self.DA_fake)) \
+ self.L1_lambda * abs_criterion(self.real_A, self.fake_A_) \
+ self.L1_lambda * abs_criterion(self.real_B, self.fake_B_)
self.g_loss = self.criterionGAN(self.DA_fake, tf.ones_like(self.DA_fake)) \
+ self.criterionGAN(self.DB_fake, tf.ones_like(self.DB_fake)) \
+ self.L1_lambda * abs_criterion(self.real_A, self.fake_A_) \
+ self.L1_lambda * abs_criterion(self.real_B, self.fake_B_)
self.fake_A_sample = tf.placeholder(tf.float32,
[None, self.image_size, self.image_size,
self.input_c_dim], name='fake_A_sample')
self.fake_B_sample = tf.placeholder(tf.float32,
[None, self.image_size, self.image_size,
self.output_c_dim], name='fake_B_sample')
self.DB_real = self.discriminator(self.real_B, self.options, reuse=True, name="discriminatorB")
self.DA_real = self.discriminator(self.real_A, self.options, reuse=True, name="discriminatorA")
self.DB_fake_sample = self.discriminator(self.fake_B_sample, self.options, reuse=True, name="discriminatorB")
self.DA_fake_sample = self.discriminator(self.fake_A_sample, self.options, reuse=True, name="discriminatorA")
self.db_loss_real = self.criterionGAN(self.DB_real, tf.ones_like(self.DB_real))
self.db_loss_fake = self.criterionGAN(self.DB_fake_sample, tf.zeros_like(self.DB_fake_sample))
self.db_loss = (self.db_loss_real + self.db_loss_fake) / 2
self.da_loss_real = self.criterionGAN(self.DA_real, tf.ones_like(self.DA_real))
self.da_loss_fake = self.criterionGAN(self.DA_fake_sample, tf.zeros_like(self.DA_fake_sample))
self.da_loss = (self.da_loss_real + self.da_loss_fake) / 2
self.d_loss = self.da_loss + self.db_loss
self.g_loss_a2b_sum = tf.summary.scalar("g_loss_a2b", self.g_loss_a2b)
self.g_loss_b2a_sum = tf.summary.scalar("g_loss_b2a", self.g_loss_b2a)
self.g_loss_sum = tf.summary.scalar("g_loss", self.g_loss)
self.g_sum = tf.summary.merge([self.g_loss_a2b_sum, self.g_loss_b2a_sum, self.g_loss_sum])
self.db_loss_sum = tf.summary.scalar("db_loss", self.db_loss)
self.da_loss_sum = tf.summary.scalar("da_loss", self.da_loss)
self.d_loss_sum = tf.summary.scalar("d_loss", self.d_loss)
self.db_loss_real_sum = tf.summary.scalar("db_loss_real", self.db_loss_real)
self.db_loss_fake_sum = tf.summary.scalar("db_loss_fake", self.db_loss_fake)
self.da_loss_real_sum = tf.summary.scalar("da_loss_real", self.da_loss_real)
self.da_loss_fake_sum = tf.summary.scalar("da_loss_fake", self.da_loss_fake)
self.d_sum = tf.summary.merge(
[self.da_loss_sum, self.da_loss_real_sum, self.da_loss_fake_sum,
self.db_loss_sum, self.db_loss_real_sum, self.db_loss_fake_sum,
self.d_loss_sum]
)
self.test_A = tf.placeholder(tf.float32,
[None, self.image_size, self.image_size,
self.input_c_dim], name='test_A')
self.test_B = tf.placeholder(tf.float32,
[None, self.image_size, self.image_size,
self.output_c_dim], name='test_B')
self.testB = self.generator(self.test_A, self.options, True, name="generatorA2B")
self.testA = self.generator(self.test_B, self.options, True, name="generatorB2A")
t_vars = tf.trainable_variables()
self.d_vars = [var for var in t_vars if 'discriminator' in var.name]
self.g_vars = [var for var in t_vars if 'generator' in var.name]
for var in t_vars: print(var.name)
def train(self, args):
"""Train cyclegan"""
self.lr = tf.placeholder(tf.float32, None, name='learning_rate')
self.d_optim = tf.train.AdamOptimizer(self.lr, beta1=args.beta1) \
.minimize(self.d_loss, var_list=self.d_vars)
self.g_optim = tf.train.AdamOptimizer(self.lr, beta1=args.beta1) \
.minimize(self.g_loss, var_list=self.g_vars)
init_op = tf.global_variables_initializer()
self.sess.run(init_op)
self.writer = tf.summary.FileWriter("./logs/", self.sess.graph)
counter = 1
start_time = time.time()
if args.continue_train:
if self.load(args.checkpoint_dir):
print(" [*] Load SUCCESS")
else:
print(" [!] Load failed...")
for epoch in range(args.epoch):
dataA = glob('./{}/*.*'.format(self.dataset_dir + '/trainA'))
dataB = glob('./{}/*.*'.format(self.dataset_dir + '/trainB'))
np.random.shuffle(dataA)
np.random.shuffle(dataB)
batch_idxs = min(min(len(dataA), len(dataB)), args.train_size) // self.batch_size
lr = args.lr if epoch < args.epoch_step else args.lr*(args.epoch-epoch)/(args.epoch-args.epoch_step)
for idx in range(0, batch_idxs):
batch_files = list(zip(dataA[idx * self.batch_size:(idx + 1) * self.batch_size],
dataB[idx * self.batch_size:(idx + 1) * self.batch_size]))
batch_ima
爱研究的小牛
- 粉丝: 2301
- 资源: 204
最新资源
- "BLDC无刷直流电机双闭环矢量控制仿真研究与实践:模型构建、性能验证与学习资源",BLDC无刷直流电机双闭环矢量控制仿真 仿真为BLDC无刷直流电机的双闭环控制,仿真配套的说明文档详细的描述的每个模
- "COMSOL模拟下的隧道断层突水案例研究:不同开挖步数对围岩断层内孔隙水压应力场及塑性区分布的影响分析",COMSOL隧道断层突水案例 模拟不同开挖步数下,围岩断层内孔隙水压应力场塑性区分布
- 基于逻辑门限值控制的并联P2混合动力汽车Simulink模型研究:多维度仿真图像与中文注释的整车模型构建,并联p2混合动力汽车simulink模型 基于逻辑门限值控制策略 (工况可自行添加)可适配WL
- "基于Autosar架构的ASPIC流程BMS电池管理系统应用层模型开发,满足功能安全ASIL C等级要求,适用于量产车型使用",量产车型使用,BMS电池管理系统应用层模型,按照ASPIC流程开发,基
- 基于多种智能算法的路径规划技术研究:遗传算法、麻雀算法、狼群优化、粒子群算法与差分进化算法的综合应用与解析,路径规划-遗传算法 麻雀算法 狼群优化 粒子群算法 差分进化算法 1 五种算法进行路径
- "遗传算法优化PID控制:基于MATLAB 2021b的m文件与Simulink联合仿真研究",遗传算法优化 PID 控制,采用 m 文件联合 Simulink进行仿真,MATLAB2021b, ,核
- 三相并网逆变器双闭环控制策略:外环电网电流内环电容电流的协调控制算法与单位功率因数因子的实现,以及电网电压与电流的同相稳定 ,三相并网逆变器双闭环控制 采用电网电流外环电容电流内环控制算法 含有源阻尼
- 基于Comsol技术的锂沉积模拟模型:多孔结构下的锂沉积过程研究,comsol锂沉积模型 模拟多孔锂沉积 ,comsol锂沉积模型; 锂沉积模拟; 多孔锂沉积; 模型模拟,多孔锂沉积模拟:Comsol
- COMSOL燃料电池仿真教程:PEMFC模拟分析详解与双极板流道设计实操教学 ,comsol电池仿真燃料电池仿真文件PEMFC,FLUENT or COMSOL,详细流程教学 代做200KW双极板流
- "射频电路设计方案及其硬件实现研究:涉及收发机与频率源的深度解析",射频电路方案设计以及硬件实现 包括收发机,频率源等 ,射频电路方案设计; 硬件实现; 收发机; 频率源 ,"射频电路设计与实现:收发
- "高频宽调谐范围LC-VCO设计报告:从基础理论到实践应用,低噪声高效率射频IC设计入门指南",LC-VCO设计报告 高频,宽调谐范围,低价位噪声,射频ic设计入门 调谐范围31.1~34.6GH
- 深入探索Comsol SOFC:固体氧化物燃料电池的仿真与性能分析(涉及温度场、气体分布及曲线表现),Comsol sofc固体氧化物燃料电池仿真(温度场分布,气体分布,极化曲线,性能曲线) ,Com
- "Comsol仿真技术:电池组串并联的电热性能研究与应用",Comsol电池组串并联仿真 可以设计多个单体电池的串并联成组电池包,模组,研究电池组整体的电,热性能 ,Comsol; 电池组串并联;
- "Comsol多孔介质中多相流模拟:水驱油过程及其应用",comsol多孔介质多相流comsol水驱油 ,核心关键词:Comsol; 多孔介质; 多相流; 水驱油; 模拟仿真,"COMSOL模拟多孔介
- 西门子PLC一拖二换热站自控系统程序详解:双循环泵与双补水泵的自动切换控制,X01-1西门子PLC一拖二热站自控系统程序,2个循环泵,2个补水泵,循环泵与补水泵采用一用一备,按设置时间自动切,硬件:西
- 基于Comsol的弱形式求解法:三维光子晶体能带结构研究,Comsol弱形式求解三维光子晶体能带 ,Comsol;弱形式求解;三维光子晶体;能带,Comsol求解三维光子晶体能带弱形式法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈