tf.one_hot()使用

来源:互联网 发布:网络妖人再造天txt 编辑:程序博客网 时间:2024/05/18 13:42

tf.one_hot在看conditionGAN的时候注意到label的输入要把它转换成one-hot形式,再与噪声z进行tf.concat输入,之前看的时候忽略了,现在再看才算明白为什么。

tf.one_hot(    indices,#输入,这里是一维的    depth,# one hot dimension.    on_value=None,#output 默认1    off_value=None,#output 默认0    axis=None,#根据我的实验,默认为1    dtype=None,    name=None)

代码

import tensorflow as tfimport numpy as npz=np.random.randint(0,10,size=[10])y=tf.one_hot(z,10,on_value=1,off_value=None,axis=0)with tf.Session()as sess:    print(z)    print(sess.run(y))[5 7 7 0 5 5 2 0 0 0][[0 0 0 1 0 0 0 1 1 1] [0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 1 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [1 0 0 0 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 1 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0]]
#!/usr/bin/env python3# -*- coding: utf-8 -*-import tensorflow as tfimport numpy as npimport osos.environ["CUDA_VISIBLE_DEVICES"] = "2"z=np.random.randint(0,10,size=[10])y=tf.one_hot(z,10,on_value=1,off_value=None)y1=tf.one_hot(z,10,on_value=1,off_value=None,axis=1)with tf.Session()as sess:    print(z)    print(sess.run(y))    print("axis=1按行排", sess.run(y1))    [6 3 4 9 6 5 5 1 2 1][[0 0 0 0 0 0 1 0 0 0] [0 0 0 1 0 0 0 0 0 0] [0 0 0 0 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 1 0 0 0] [0 0 0 0 0 1 0 0 0 0] [0 0 0 0 0 1 0 0 0 0] [0 1 0 0 0 0 0 0 0 0] [0 0 1 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0]]axis=1按行排 [[0 0 0 0 0 0 1 0 0 0] [0 0 0 1 0 0 0 0 0 0] [0 0 0 0 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 1 0 0 0] [0 0 0 0 0 1 0 0 0 0] [0 0 0 0 0 1 0 0 0 0] [0 1 0 0 0 0 0 0 0 0] [0 0 1 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0]]

感觉实际用的时候可以不传入axis值。可以看到经过one-hot的处理,输入的维度变成了10×depth,值也变成了0和1.

下面说在condition GAN中要输入标签信息y,怎样处理的。
y是mnist的标签值,0和10之间的整数,尺寸为[BATCH],经过one-hot处理后维度变成了[BATCH,10]值也是0和1,此时再与噪声z按列(axis=1)连接,变成条件GAN的输入。因此one-hot操作是必须的,这个处理在infoGAN中将z,categorical latent code、continuous latent code连接在一起输入也要用到。

  y = tf.one_hot(y, 10, name='label_onehot')   z = tf.random_uniform([BATCH, 100], -1, 1, name='z_train')  tf.concat([z, y], 1)
原创粉丝点击