七月 上海| 高性能计算之GPU CUDA培训

7月27-29日三天密集式学习  快速带你入门阅读全文>

正文共600个字,1张图,预计阅读时间5分钟。

编写训练的python文件

 1# -*- coding: UTF-8 -*- 2""" 3训练 DCGAN 4""" 5import os 6import glob 7import numpy as np 8from scipy import misc 9import keras as tf.keras10from network import *11def train():12if __name__ == "__main__":13train()

获取训练数据

1# 获取训练数据2data = []3for image in glob.glob("images/*"):4# 读取图片,返回一个数组对象5image_data = misc.imread(image)  # imread 利用 PIL 来读取图片数据6data.append(image_data)7input_data = np.array(data)

将数据进行标准化

1# 将数据标准化成 [-1, 1] 的取值, 这也是 Tanh 激活函数的输出范围2input_data = (input_data.astype(np.float32) - 127.5) / 127.5

tanh的取值范围是-1 到 1

像素值最大255 减去一半127.5 再除以 127.5 被限制到-1到1之间。

构造生成器和判别器

1# 构造 生成器 和 判别器2g = generator_model()3d = discriminator_model()

构建生成器和判别器组成的网络模型

1# 构建 生成器 和 判别器 组成的网络模型2d_on_g = generator_containing_discriminator(g, d)

里面的参数传入g和d

优化器使用Adam optimizers

1# 优化器用 Adam Optimizer2g_optimizer = tf.keras.optimizers.Adam(lr=LEARNING_RATE, beta_1=BETA_1)3d_optimizer = tf.keras.optimizers.Adam(lr=LEARNING_RATE, beta_1=BETA_1)

学习率是我们之前定义的学习率。beta_1 参数。

使用compile方法对于神经网络进行配置 生成器 和 判别器

1# 配置 生成器 和 判别器2g.compile(loss="binary_crossentropy", optimizer=g_optimizer)3d_on_g.compile(loss="binary_crossentropy", optimizer=g_optimizer)4d.trainable = True5d.compile(loss="binary_crossentropy", optimizer=d_optimizer)

交叉熵损失函数。固定住判别器去优化生成器。相反固定一方优化另一方。

开始训练

 1# 开始训练 2for epoch in range(EPOCHS): 3# 每经过一个batchsize大小训练一下 4for index in range(int(input_data.shape[0] / BATCH_SIZE)): 5    # 数据切片 6    input_batch = input_data[index * BATCH_SIZE : (index + 1) * BATCH_SIZE] 7 8    # 连续型均匀分布的随机数据(噪声) 9    random_data = np.random.uniform(-1, 1, size=(BATCH_SIZE, 100))10    # 生成器 生成的图片数据11    generated_images = g.predict(random_data, verbose=0)12    # 首尾相连,输入自身以及产生的图片13    input_batch = np.concatenate((input_batch, generated_images))14    # 输出的数据要么是0 要么是 1。1就是通过检测,跟真实图片一致。15    output_batch = [1] * BATCH_SIZE + [0] * BATCH_SIZE1617    # 训练 判别器,让它具备识别不合格生成图片的能力18    d_loss = d.train_on_batch(input_batch, output_batch)1920    # 当训练 生成器 时,让 判别器 不可被训练21    d.trainable = False2223    # 重新生成随机数据。很关键24    random_data = np.random.uniform(-1, 1, size=(BATCH_SIZE, 100))2526    # 训练 生成器,并通过不可被训练的 判别器 去判别27    g_loss = d_on_g.train_on_batch(random_data, [1] * BATCH_SIZE)2829    # 恢复 判别器 可被训练30    d.trainable = True3132    # 打印损失33    print("Epoch {}, 第 {} 步, 生成器的损失: {:.3f}, 判别器的损失: {:.3f}".format(epoch, index, g_loss, d_loss))

保存生成器和判别器的参数

1# 保存 生成器 和 判别器 的参数2# 大家也可以设置保存时名称不同(比如后接 epoch 的数字),参数文件就不会被覆盖了3if epoch % 10 == 9:4    g.save_weights("generator_weight", True)5    d.save_weights("discriminator_weight", True)

当我们训练完成,会生成一个generator_weight文件.

它是一个h5py的文件。

1pip install h5py

编写神经网络生成图片的方法

 1 # -*- coding: UTF-8 -*- 2 """ 3 用 DCGAN 的生成器模型 和 训练得到的生成器参数文件 来生成图片 4 """ 5 import numpy as np 6 from PIL import Image 7 import keras as tf.keras 8 from network import * 9 def generate():10 # 构造生成器11 g = generator_model()12# 配置 生成器13g.compile(loss="binary_crossentropy", optimizer=tf.keras.optimizers.Adam(lr=LEARNING_RATE, beta_1=BETA_1))14# 加载训练好的 生成器 参数15g.load_weights("generator_weight")1617# 连续型均匀分布的随机数据(噪声)18random_data = np.random.uniform(-1, 1, size=(BATCH_SIZE, 100))19# 用随机数据作为输入,生成器 生成图片数据20images = g.predict(random_data, verbose=1)2122# 用生成的图片数据生成 PNG 图片23for i in range(BATCH_SIZE):24# 将被限制到-1到1之间的数据进行还原25image = images[i] * 127.5 + 127.526Image.fromarray(image.astype(np.uint8)).save("image-%s.png" % i)27 if __name__ == "__main__":28generate()

代码完成与测试模型

一个错误的个人使用,因为我的TensorFlow版本较老。keras并没有被集成进来。

我以为可以

1import keras as tf.keras

但是测试失败了,直接把全部的tf.keras全部替换为keras。

新的风暴

1throws OOM when allocating tensor with shape

又是穷人才会遇到的问题。

将batch_size大小从128改为64可以正常训练。

然后使用generator.py生成图片。

1# 配置 生成器 和 判别器2g.compile(loss="binary_crossentropy", optimizer=g_optimizer)3d_on_g.compile(loss="binary_crossentropy", optimizer=g_optimizer)4d.trainable = True5d.compile(loss="binary_crossentropy", optimizer=d_optimizer)

让判别器先可以训练,再设置。我们训练生成器的随机数据不应该和训练整个dong的一样,不然不够随机化。

基本都得训练好几个小时。

原文链接:https://www.jianshu.com/p/fdac1cdae92d

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

TensorFlow应用实战 | 编写训练的python文件相关推荐

  1. 在Linux上编写并运行Python文件

    一.编写.py文件 1.检测python环境 python 建立python文件 vim test.py 输入python代码 print("Hello world!\n") PS ...

  2. 用pycharm写python_如何利用pyCharm编写和运行python文件

    在安装python环境后,通常可以利用IDE pyCharm来编译我们的python文件.创建一个python文件夹,用pyCharm打开文件夹,在文件夹中新建一个python文件demo.py 也许 ...

  3. 深度学习框架tensorflow二实战(训练一个简单二分类模型)

    导入工具包 import os import warnings warnings.filterwarnings("ignore") import tensorflow as tf ...

  4. 这本《Python+TensorFlow机器学习实战》给你送到家!

    小伙伴们,本公众号很久没用送书啦,是不是很是期待呀?放心啦,这次每个大佬送5本书,一共25本!包邮到你家楼下,哈哈! 怎么送书呢? 方法当然是很简单啦,关注下面公众号,后台回复「抽奖」,弹出小程序二维 ...

  5. 使用C#把Tensorflow训练的.pb文件用在生产环境

    训练了很久的Tf模型,终于要到生产环境中去考验一番了.今天花费了一些时间去研究tf的模型如何在生产环境中去使用.大概整理了这些方法. 继续使用分步骤保存了的ckpt文件 这个貌似脱离不了tensorf ...

  6. Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测

    Python人脸微笑识别2--卷积神经网络进行模型训练目录 一.微笑数据集下载 1.微笑数据集下载 2.创建人脸微笑识别项目 3.数据集上传至Ubuntu人脸微笑识别项目文件夹 二.Python代码实 ...

  7. python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件

    看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命 ...

  8. Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况)

    Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况) 目录

  9. Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况

    Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况 目录 Python基于MASK信息抽取ROI子图实战:原始影像和mask

最新文章

  1. [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)
  2. Linux 挂在命令mount
  3. uft自动化测试工具安装步骤_自动化功能测试和接口测试工具整理
  4. java 写入xml文件_java读写xml文件
  5. 国际化的支持--多编码问题
  6. 使用Spider提取数据(爬取起点中文网)
  7. 宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统
  8. java po vo bo是什么以及_Java中VO , PO , BO, DAO ,POJO是什么意思
  9. python阿拉伯数字转中文_阿拉伯数字转化为中文数字
  10. userdel: user xxx is currently used by process xxx
  11. 《国富论》阅读笔记03
  12. 离职前一定要做好这7件事情,少一件都很麻烦。
  13. “onkeyup”=按键抬起触发,“onafterpaste”=粘贴之后触发
  14. 关于 C++ 打印 PDF 打印及 PDF 转图片、合并
  15. 浪潮服务器dhcp修改ip,IP地址管理—DDI(DNS, DHCP, IPAM)解决方案
  16. 关于眼镜的后续。。。。
  17. 人工智能在实体零售行业,主要的应用场景是什么?
  18. taking address of temporary错误
  19. 英文歌曲:Battle Cry (变形金刚第四部主题曲)
  20. python的CANOpen

热门文章

  1. zipkin brave mysql_zipkin mysql表结构
  2. oracle数据库修改归档和非归档模式
  3. python类和对象介绍_Python开发基础-Day17面向对象编程介绍、类和对象
  4. 来自山西机器人乐队_冰山上的机器人X三十禁放映 | 庞宽、李霄云对谈预告
  5. 短小有趣的c语言代码,分享一段有趣的小代码
  6. C#中输入法全角转换半角
  7. postgresql-9.2beta2 安装相关
  8. python-9:nonlocal,指定上一级变量
  9. html css 深入理解float
  10. 九度OJ1111题-单词替换