TensorFlow应用实战 | 编写训练的python文件
七月 上海| 高性能计算之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文件相关推荐
- 在Linux上编写并运行Python文件
一.编写.py文件 1.检测python环境 python 建立python文件 vim test.py 输入python代码 print("Hello world!\n") PS ...
- 用pycharm写python_如何利用pyCharm编写和运行python文件
在安装python环境后,通常可以利用IDE pyCharm来编译我们的python文件.创建一个python文件夹,用pyCharm打开文件夹,在文件夹中新建一个python文件demo.py 也许 ...
- 深度学习框架tensorflow二实战(训练一个简单二分类模型)
导入工具包 import os import warnings warnings.filterwarnings("ignore") import tensorflow as tf ...
- 这本《Python+TensorFlow机器学习实战》给你送到家!
小伙伴们,本公众号很久没用送书啦,是不是很是期待呀?放心啦,这次每个大佬送5本书,一共25本!包邮到你家楼下,哈哈! 怎么送书呢? 方法当然是很简单啦,关注下面公众号,后台回复「抽奖」,弹出小程序二维 ...
- 使用C#把Tensorflow训练的.pb文件用在生产环境
训练了很久的Tf模型,终于要到生产环境中去考验一番了.今天花费了一些时间去研究tf的模型如何在生产环境中去使用.大概整理了这些方法. 继续使用分步骤保存了的ckpt文件 这个貌似脱离不了tensorf ...
- Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测
Python人脸微笑识别2--卷积神经网络进行模型训练目录 一.微笑数据集下载 1.微笑数据集下载 2.创建人脸微笑识别项目 3.数据集上传至Ubuntu人脸微笑识别项目文件夹 二.Python代码实 ...
- python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件
看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命 ...
- Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况)
Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况) 目录
- Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况
Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况 目录 Python基于MASK信息抽取ROI子图实战:原始影像和mask
最新文章
- [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)
- Linux 挂在命令mount
- uft自动化测试工具安装步骤_自动化功能测试和接口测试工具整理
- java 写入xml文件_java读写xml文件
- 国际化的支持--多编码问题
- 使用Spider提取数据(爬取起点中文网)
- 宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统
- java po vo bo是什么以及_Java中VO , PO , BO, DAO ,POJO是什么意思
- python阿拉伯数字转中文_阿拉伯数字转化为中文数字
- userdel: user xxx is currently used by process xxx
- 《国富论》阅读笔记03
- 离职前一定要做好这7件事情,少一件都很麻烦。
- “onkeyup”=按键抬起触发,“onafterpaste”=粘贴之后触发
- 关于 C++ 打印 PDF 打印及 PDF 转图片、合并
- 浪潮服务器dhcp修改ip,IP地址管理—DDI(DNS, DHCP, IPAM)解决方案
- 关于眼镜的后续。。。。
- 人工智能在实体零售行业,主要的应用场景是什么?
- taking address of temporary错误
- 英文歌曲:Battle Cry (变形金刚第四部主题曲)
- python的CANOpen
热门文章
- zipkin brave mysql_zipkin mysql表结构
- oracle数据库修改归档和非归档模式
- python类和对象介绍_Python开发基础-Day17面向对象编程介绍、类和对象
- 来自山西机器人乐队_冰山上的机器人X三十禁放映 | 庞宽、李霄云对谈预告
- 短小有趣的c语言代码,分享一段有趣的小代码
- C#中输入法全角转换半角
- postgresql-9.2beta2 安装相关
- python-9:nonlocal,指定上一级变量
- html css 深入理解float
- 九度OJ1111题-单词替换