在前一篇中,我们定义了一个预先判别网络D_pre,从而得到了判别网络D的初始化权重wb,使得判别网络更精准。
在这一篇中,我们将构造一个生成网络模型,用于生成新的数据
生成网络构造
1 2 3 4 5 |
def _create_model(self): with tf.variable_scope('Gen'): #G网络,生成网络,数据生成,输入是一个噪音的输入 self.z = tf.placeholder(tf.float32, shape=(self.batch_size, 1)) #输入 self.G = generator(self.z, self.mlp_hidden_size) #输出结果 |
self.G
为最终的输出结果
生成函数
1 2 3 4 |
def generator(input, h_dim): h0 = tf.nn.softplus(linear(input, h_dim, 'g0')) #输入12*1 h1 = linear(h0, 1, 'g1') return h1 |
通过简易的网络(仅两层),输入12*1的shape,对wb参数进行初始化,得到生成的结果
判别网络构造
1 2 3 4 5 6 7 |
def _create_model(self): with tf.variable_scope('Disc') as scope: self.x = tf.placeholder(tf.float32, shape=(self.batch_size, 1)) #真实数据 self.D1 = discriminator(self.x, self.mlp_hidden_size) #真实数据输入 scope.reuse_variables() #重新使用变量 self.D2 = discriminator(self.G, self.mlp_hidden_size) #生成网络输入 |
判别网络一方面要接收真实的数据,另一方面要接收生成的数据
总结
在这一部分中,我们定义了判别网络和生成网络。
由于我们到时候采用的是一维的数据点,故在生成网络我们仅采用了两层网络的架构
而在判别网络中,我们需要同时输入真实数据和生成的数据,让网络进行判别