矩池云 | 条件生成对抗模型生成数字图片

在上个数字识别的例子中,我们使用了一个简单的3层神经网络来识别给定图片的中的数字。

这次我们在上次的例子中在提升一下,这次我们选用条件生成对抗模型(Conditional Generative Adversarial Networks)来生成数字图片。

下面就让我们开始吧!

第一步:import 我们需要的数据库

%matplotlib inline

from __future__ import print_function, division

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.cm as cm

import seaborn as sns
sns.set_style('white')

from keras.layers import Input, Dense, Reshape, Flatten, Dropout, multiply
from keras.layers import BatchNormalization, Activation, Embedding, ZeroPadding2D
from keras.layers.advanced_activations import LeakyReLU
from keras.layers.convolutional import UpSampling2D, Conv2D
from keras.models import Sequential, Model
from keras.optimizers import Adam, SGD

第二步:数据预处理

在上个例子中,我们使用的是28*28的二值图像,也就是说像素只有0和1,0表示黑色,1表示白色。

在上个例子中,我们使用28*28的灰度图像,每个像素的值都是从0~255的数值,值越大,越接近白色。

2.1 数据加载函数

首先定义一个数据加载函数 load_data 用来加载数据。

不同于上一个例子,我们的数据存放在 npz 文件中,numpy 提供了 load 接口可以直接读取。

通过函数的输出我们就可以看到,npz文件里的内容是 x_traln , y_traln , x_test , y_ test 。

这几个内容标签分别对应训练图片数据,训练图片数据的 label,测试图片数据,测试图片数据的 label。

def load_data():
    data = np.load('mnist.npz')
    print(data.files)
    x_train = data['x_train']
    y_train = data['y_train']
    x_test = data['x_test']
    y_test = data['y_test']

    x_train = (x_train.astype(np.float32) - 127.5) / 127.5
    x_train = np.expand_dims(x_train, axis=3)
    y_train = y_train.reshape(-1, 1)

    return (x_train, y_train), (x_test, y_test)

(x_train, y_train), (x_test, y_test)=load_data()

2.2 数据查看

在任何模型建立之前,常规的操作是先查看数据的情况,比如数据集的大小,训练集和测试集的数据数量,标签的数据数量分布等等。

2.2.1 查看原始数据的纬度

训练集有60000条数据,测试集有100000条数据,并且每一条数据有28*28的图片像素数据。

print(x_train.shape)

print(x_test.shape)

2.2.2 查看标签的数量

通过查看训练标签跟测试标签的数量,我们可以观察到,训练和测试的数据集跟训练和测试的标签在数量上是一一对应的。这也是我么想要的结果,表示我们的数据集是完整的。

print(y_train.shape)

print(y_test.shape)

2.2.3 查看所有的标签种类

可以看出标签表示了从0-9的数字,没有其他的错误数据。

np.unique(y_train)

np.unique(y_test)

2.3数据可视化

接下来我随机的选取一些我们已经转换好的图片数据,用 matplot 来查看下,标签和图片是否一致。

plt.figure(figsize=(15, 9))
for i in range(50):
    random_selection = np.random.randint(0, 500)
    plt.subplot(5, 10, 1+i)
    plt.title(y_train[random_selection])
    plt.imshow(x_train[random_selection][:,:,0], cmap=cm.gray)

2.4 查看数据是否平衡

分类的设计都是基于类分布大致平衡这一假设,通常假定用于训练的数据集是平衡的,即各类所含的样本数大致相当。

均匀的数据分布,将会

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值