用DCGAN训练自己的数据集

第一步:读入数据

import tensorflow as tf
import numpy as np
import os
import matplotlib.pyplot as plt
import pdb

def get_files(file_dir):
    img=[]
    label=[]
    for file in os.listdir(file_dir):
        img.append(file_dir+file)
        label.append(1)
    temp=np.array([img,label]).T
    #使用shuffle打乱顺序
    np.random.shuffle(temp)
    img_list=list(temp[:,0])
    label_list=list(temp[:,1])
    label_list=[int(i) for i in label_list]
    return img_list,label_list

第二步:将上述的list产生训练的批次

       tensorflow为了充分利用CPU和GPU,减少CPU或者GPU等待数据的空闲时间,使用两个线程分别执行数据的读入和数据的计算。即用一个线程源源不断地从硬盘中读取图像数据到内存队列,另一个线程负责计算任务,所需的数据直接从内存队列中获取。tensorflow在内存队列之前还设置了文件名队列,文件名队列存放参与训练的文件名,要训练N个epoch,则文件名队列中就含有N个批次的所有文件名,如图所示。

       在N个epoch的文件名后是一个结束标志,当tensorflow捕捉到结束标志时会抛出一个OutofRange的异常,外部捕捉到这个异常后就结束程序。

input_queue=tf.train.slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None,name=None)是一个tensor生成器,每次从一个tensor列表中抽取一个tensor放入文件名队列。需要调用tf.train.start_queue_runners启动执行文件名队列填充的线程,之和计算单元才会把数据读出来,否则文件名队列是空的,计算单元会一直处于等待状态

tensor_list: 输入,有多少图像该参数第一维就有多少;若tensor_list=[image,label],则input_queue[1]代表标签,input_quue[0]代表图像,需要通过tf.read_file(input_queue[0])输出图像

num_epochs: 迭代次数,设置为None代表可以无限次地遍历tensor列表,若设置为N,则只能遍历N次;

shuffle: 是否打乱样本的顺序;

seed: 生成随机数的种子,在shuffle为True时才有用;

capacity: 代表tensor列表容量

shared_name: 如果设置一个shared_name,可在不同的Session中可通过这个名字共享生成的tensor;

name: 设置操作的名字

tf.train.batch(tensors, batch_size, num_threads=1, capacity=32, ...)

tf.train.shuffle_batch(tensors, batch_size, num_threads=1, capacity=32, min_after_dequeue,...)

这两个函数用来生成批次数据

则生成批次数据code如下:

def get_batch(image,label,batch_size):
    image_W=200
    image_H=200
    #将python中的list类型转换为tf能识别的格式
    image=tf.cast(image,tf.string)
    label=tf.cast(label,tf.int32)

    #产生一个输入队列queue
    epoch_num=50
    input_queue=tf.train.slice_input_producer([image,label],num_epochs=epoch_num)

    label=input_queue[1]
    image_contents=tf.read_file(input_queue[0])
  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DCGAN全称Deep Convolutional Generative Adversarial Networks,是一种深度卷积生成对抗网络结构。它通过对抗训练的方式,将生成模型和判别模型分别训练,达到生成逼真的样本的效果。 要使用DCGAN训练自己的数据集,首先需要准备好数据集数据集应该足够大,并且包含多个不同类别的样本。一般建议将数据集进行预处理,如缩放和裁剪,以便于网络训练。 接着,需要实现DCGAN网络结构。DCGAN由生成器和判别器两部分构成。生成器是一个反卷积网络,将一个随机噪声向量映射为一张逼真的图片。判别器是一个卷积神经网络,判断一张图片是否为真实图片。 在训练过程中,需要将生成器和判别器分别训练。生成器的目标是生成逼真的图片,而判别器的目标是尽可能准确地识别真实图片和生成图片。因此,训练过程可以描述为对抗过程,即生成器试图欺骗判别器,而判别器试图检测出生成器生成的假图片。 为了确保训练的稳定性,DCGAN训练过程中应该采用一些技巧。例如,使用批次归一化和LeakyReLU激活函数,以加速训练和提高生成效果。此外,应该对生成器和判别器的学习率进行调整,以防止梯度爆炸或梯度消失。 最终,通过耐心地调整参数、优化网络结构和增加训练数据,可以得到一个逼真的生成模型。这个模型可以用于生成类似于原始数据集的新样本,这对于许多应用场景非常有用,如图像合成、模型生成等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值