当前位置:首页 >> 金融
金融

数据分析——生成模型

2025-11-16 12:20

p是为了应有研修的时候是一个正值,e是一个特征函数,从而赢所取属于自己code。

然而仅仅在code上另加noise是不够的,在锻炼时,我们努力recontruction error越少小越少好,那么在锻炼时,时会偏重于于将σ习出新0,因为当σ=0时,损失就越少小。

因此在锻炼时要舍弃一项:

exp(σ)为紫色的线,(1+σ)为红色的线,二者相减则为绿色的线,最小化时这一项,则使得σi在0邻近,再所取exp,那么varaice则趋向于1,最后一项m的平方则可以看来作是L2特例化时。

因此VAE在锻炼时是重构标准化差舍弃上头那一项。

上头是VAE的来作法和直观的阐释,对于VAE的法则和推导稍微有点比较简单,这里非常简单归纳一下:

首先在高斯混和建模之前,采样x的属可以用依赖于个高斯属组合而出新的:

实为设采样由M个混和高斯建模所组出新的,x从其之前一个高斯属m而来,那么激发x的概率p(x) =p(m)*p(x|m),总体的属则为:

那么现在我们在锻炼时限制下到x降于维后所激发的code屈服一定的标准化特征函数z~N(0,I),那么:

这里z就是降于维后的code,其每三维空间都是一个物件,各有不同的是这里的高斯混和建模相当于有无限个高斯建模,因此是微分的形式。

随机出新来一个z,赢所取z的权重和权重,就可以赢所取一个x,我们努力有这样一个function,读所取z,编码器为z的权重和权重:

这也就是decoder,同样,并不需要借助一个属q(z|x),其含意是给一个x,其在z这个维度之前的属,也就是给一个x,在z维度之前的权重和权重,从而sample出新一个z。其来作的事巧合是跟纸片的相反的。

这就是encoder。

根据所集合的采样x,根据相当大似然估计:

我们并不需要相当大化时纸片的式子L,在此之后就是一系列的推导:

然后就变出新了相当大化时Lower bound,更进一步:

至此锻炼变出新了相当大化时这两项,其之前前一项可以表示为P(z)和q(z|x)的散度的负数,相当大化时这一项即是最小化时二者的KL散度。

这一项的含意就是应有z(也就是降于维的code)的属要最大限度与x在z维度之前的属值得注意。这也就限制了在降于维后要保持一定的属,那么在sample时我们可以从该属之前来聚合一些采样。这也是VAE的精神所在。

而后一项就是使得z聚合的x要与慢慢地的x越少接近越少好,这与慢慢地的autoencoder是赞同的。

2.3 VAE的弊端

  VAE虽然能够相比较容易地激发一些图表,但实际上VAE并并未习时会如何真正的去聚合一些属于自己抽象概念,而是一直在而出名,努力尽可能地接近已知采样。比如:

  对于聚合的两张相片“7”,第一张显然对于我们来问道是可以只能接受的,而第二种是不可只能接受的,然而对于VAE来问道,二者具有相同的损失(重构标准化差)。同时通过实验可以说明了新,VAE聚合的相片一般相比较“糊”,这是因为autoencoder在聚合相片时,每一个pixel是独立的,它并并未慎重考虑相互之间的关联(大局观)。

  这时就并不需要另一个聚合建模主角了——GAN。

2.4 VAE的意味着

在讲解GAN之前,先来来作个VAE的demo,上去非常简单对autoencoder展开了非常简单的意味着,这里顺便就来作一下VAE,code并未芯片,只是VAE的意味着全过程,便于阐释本部份内容,以打字数字辨认为例。

import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfrom tensorflow.examples.tutorials.mnist import input_data# 读书所取图表mnist = input_data.read_data_sets('/MNIST_data', one_hot=True)# 读所取比如说符,因为是无督导研修,所以只并不需要xx = tf.placeholder(tf.float32, [None, 784])# 界定变量从读所取层到隐密层的w,b,隐密层实为设有100个结点encode_w = tf.Variable(tf.truncated_normal([784, 100], stddev=0.01))encode_b = tf.Variable(tf.zeros([100]))# 界定隐密层到编码器m那一层的也就是说w,实为设降于维到128维encode_mean_w = tf.Variable(tf.truncated_normal([100, 128], stddev=0.01))# 界定隐密层到编码器的variance的也就是说encode_var_w = tf.Variable(tf.truncated_normal([100, 128], stddev=0.01))# code到编码器层的w和bdecode_w = tf.Variable(tf.truncated_normal([128, 784], stddev=0.01))decode_b = tf.Variable(tf.zeros([784]))# 隐密层编码器encode_output = tf.nn.relu(tf.matmul(x, encode_w) + encode_b)# 解析mean和varianceencode_mean = tf.matmul(encode_output, encode_mean_w)encode_var = tf.matmul(encode_output, encode_var_w)# 舍弃一个random normalE = tf.random_normal([1, 128])# 降于维后的图表 m + exp(var) * Ecode = tf.add(tf.exp(encode_var)*E, encode_mean)# decoder,把code解回原图表784维decode_output = tf.nn.relu(tf.matmul(code, decode_w) + decode_b)# loss,慢慢地的重构标准化差decode_loss = tf.reduce_mean((decode_output - x) ** 2)# 舍弃另一项标准化差encode_loss = tf.reduce_mean(tf.exp(encode_var) - (1 + encode_var) + encode_mean ** 2)loss = tf.add(decode_loss, encode_loss)optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)# tf.reset_default_graph()with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(10000): # total_num = int(mnist.train.num_examples/100) # for i in range(total_num): xs, ys = mnist.train.next_batch(100) _, loss_ = sess.run([optimizer, loss], feed_dict={x: xs}) if epoch % 100 == 0: print('epoch:', epoch, 'loss:', loss_) # test I_test = tf.truncated_normal(shape=[1, 128], stddev=0.00001) decode_output_test = tf.nn.relu(tf.matmul(I_test, decode_w) + decode_b) decode_output_test_data = sess.run([decode_output_test]) test_img = np.reshape(decode_output_test_data, [28, 28]) plt.imshow(test_img, cmap='gray') plt.pause(0.1)接合

可以看不到随着锻炼的次数提高,聚合的相片也越少来越少“准确”,隐约可以看不到“9”的圆锥形,一方面是因为并未对建模之前的表达式展开调节,舍弃建模比较非常简单,特征提所取不完整。另一方面也是上去问道的VAE本身的弊端。

在此之后结合CNN,经过线性最后再对相片展开降于维,利用VAE展开降于维和还原:

# 这里首先界定一个max_pool函数,离开的经过max_pool最后的相片和所互换的查找def max_pool_with_argmax(net, stride): _, mask = tf.nn.max_pool_with_argmax(net, ksize=[1, stride, stride, 1], strides=[1, stride, stride, 1], padding='SAME') mask = tf.stop_gradient(mask) net = tf.nn.max_pool(net, ksize=[1, stride, stride, 1], strides=[1, stride, stride, 1], padding='SAME') return net, mask# 根据max_pool的查找展开反池化时的操作,法则在上去CNN部份已经问道过def unpool(net, mask, stride): ksize = [1, stride, stride, 1] input_shape = net.get_shape().as_list() output_shape = (input_shape[0], input_shape[1] * ksize[1], input_shape[2] * ksize[2], input_shape[3]) one_like_mask = tf.ones_like(mask) batch_range = tf.reshape(tf.range(output_shape[0], dtype=tf.int64), shape=[input_shape[0], 1, 1, 1]) b = one_like_mask * batch_range y = mask // (output_shape[2] * output_shape[3]) x = mask % (output_shape[2] * output_shape[3]) // output_shape[3] feature_range = tf.range(output_shape[3], dtype=tf.int64) f = one_like_mask * feature_range updates_size = tf.size(net) indices = tf.transpose(tf.reshape(tf.stack([b, y, x, f]), [4, updates_size])) values = tf.reshape(net, [updates_size]) ret = tf.scatter_nd(indices, values, output_shape) return retx = tf.placeholder(tf.float32, [100, 28, 28, 1])w_conv1 = tf.Variable(tf.truncated_normal([3, 3, 1, 64], stddev=0.01))b_conv1 = tf.constant(0.1, shape=[64])conv1 = tf.nn.relu(tf.nn.conv2d(x, w_conv1, strides=[1, 1, 1, 1], padding='SAME') + b_conv1)pool1, mask1 = max_pool_with_argmax(conv1, 2)w_conv2 = tf.Variable(tf.truncated_normal([3, 3, 64, 10], stddev=0.01))b_conv2 = tf.constant(0.1, shape=[10])conv2 = tf.nn.relu(tf.nn.conv2d(pool1, w_conv2, strides=[1, 1, 1, 1], padding='SAME') + b_conv2)pool2, mask2 = max_pool_with_argmax(conv2, 2)# pool2 = tf.nn.max_pool2d(conv2, ksize=[1, 3, 3, 1], strides=[1, 3, 3, 1], padding='SAME')conv_out = tf.reshape(pool2, [-1, 490])encode_w = tf.Variable(tf.truncated_normal([490, 100]))encode_b = tf.Variable(tf.constant(0.1, shape=[100]))encode_output = tf.add(tf.matmul(conv_out, encode_w), encode_b)encode_mean_w = tf.Variable(tf.truncated_normal([100, 128], stddev=0.01))encode_var_w = tf.Variable(tf.truncated_normal([100, 128], stddev=0.01))encode_mean = tf.matmul(encode_output, encode_mean_w)encode_var = tf.matmul(encode_output, encode_var_w)E = tf.random_normal([1, 128])code = tf.add(tf.exp(encode_var) * E, encode_mean)# decoderdecode_w = tf.Variable(tf.truncated_normal([128, 490], stddev=0.01))decode_b = tf.Variable(tf.constant(0.1, shape=[490]))decode_output = tf.nn.relu(tf.add(tf.matmul(code, decode_w), decode_b))decode_output = tf.reshape(decode_output, [-1, 7, 7, 10])t_conv2 = unpool(decode_output, mask2, 2)t_pool1 = tf.nn.conv2d_transpose(t_conv2 - b_conv2, w_conv2, pool1.shape, [1, 1, 1, 1])t_conv1 = unpool(t_pool1, mask1, 2)pre_output = tf.nn.conv2d_transpose(t_conv1-b_conv1, w_conv1, x.shape, [1, 1, 1, 1])decode_loss = tf.reduce_mean((pre_output - x) ** 2)encode_loss = tf.reduce_mean(tf.exp(encode_var) - (1 + encode_var) + encode_mean ** 2)loss = tf.add(decode_loss, encode_loss)optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(10000): # total_num = int(mnist.train.num_examples/100) # for i in range(total_num): xs, ys = mnist.train.next_batch(100) xs = np.reshape(xs, [-1, 28, 28, 1]) _, loss_ = sess.run([optimizer, loss], feed_dict={x: xs}) if epoch % 100 == 0: print('epoch:', epoch, 'loss:', loss_) # test # 这里就有一个弊端,在随机集合一个code时,在展开反池化时操作时mask的选所取只能用慢慢地的锻炼的mask了。 I_test = tf.truncated_normal(shape=[1, 128], stddev=0.01) decode_output_test = tf.nn.relu(tf.add(tf.matmul(I_test, decode_w), decode_b)) decode_output_test = tf.reshape(decode_output_test, [-1, 7, 7, 10]) mask2_test = tf.reshape(mask2[0], [-1, 7, 7, 10]) t_conv2_test = unpool(decode_output_test, mask2_test, 2) t_pool1_test = tf.nn.conv2d_transpose(t_conv2_test - b_conv2, w_conv2, [1, 14, 14, 64], [1, 1, 1, 1]) mask1_test = tf.reshape(mask1[0], [-1, 14, 14, 64]) t_conv1_test = unpool(t_pool1_test, mask1_test, 2) pre_output_test = tf.nn.conv2d_transpose(t_conv1_test - b_conv1, w_conv1, [1, 28, 28, 1], [1, 1, 1, 1]) decode_output_test_data = sess.run([pre_output_test], feed_dict={x: xs}) test_img = np.reshape(decode_output_test_data, [28, 28]) plt.imshow(test_img, cmap='gray') plt.pause(0.1)接合

可以说明了新纸片聚合的一些相片相比于之前的VAE更另加准确了,也相比较像数字了,但其之前有个弊端就是code之前注释的那样,有的一般只来作线性,不来作池化时,关于池化时后再test时如何聚合,回头再思考。

3. GAN简介

  Genrative Advesarial Networl(GAN)是机械研修之前一个耳熟能详的特例表达式,随着时长的转变,GAN也从零碎的特例表达式生命体时了更多的版本,这里就先对GAN展开简要的讲解,前面时会实质上开一节来讲解GAN及其变种特例表达式。

  GAN全名叫来作聚合敌对在线,顾名思义,就是在随之地聚合和敌对之前展开出新长研修。举一个比如说:

  图之前是红眼蝙蝠,其天敌是一种乌鸦类,在最开始时,红眼蝙蝠可能就是普通的蝴蝙蝠,而这种乌鸦靠捕食蝴蝙蝠为食,这种乌鸦认为蝴蝙蝠不是灰色的,因此,蝴蝙蝠生命体时出新灰色的看穿第一代的乌鸦,而乌鸦类也在生命体时,生命体时出新第二代,可以鉴别蝴蝙蝠是并未全缘的,因此蝴蝙蝠更进一步生命体时出新红眼蝙蝠。这实际上就是一种敌对聚合。

  那么在实际的机械习之前,敌对聚合在线有两个部份组出新,一个是Generator,另一个是Discriminator,二者在随之展开聚合与敌对,称为亦师亦友的关联。在相片聚合之前:

第一代的Generator所及聚合一些相片,给到第一代的Discriminator辨认,其认为都是实为的相片,

然后Generator生命体时到第二代,此时第二代所激发的的相片能够看穿第一代的Discriminator,单后Discriminator生命体时到第二代,发现第二代Generator激发的也是实为的,

如此每一次随之生命体时和迭代,直到Discriminator难以鉴别Generator所激发的相片是实为的。

纸片是GAN的必需概念,对于GAN的法则可以解释如下:

对于实际的采样相片的图表属我们用Pdata(x)来表示,实为设它的属是请注意这样的:

在紫色的周边地区是实际的相片,周边地区之外则激发的相片不看起来或许相片,那么我们一切都是通过锻炼赢所取Pdata(x)的属,实为设Generator所激发的属为PG(x):

我们锻炼时努力G所激发的相片的属于慢慢地的相片的图表属越少接近越少好。然而在实际之前,我们实际上并不知道PG(x)长什么样,因此这样也越少发瓶颈。

但是在GAN之前,Discriminator则可以为解决这一弊端共享方式,具体情况来作法如下:

首先Generator激发一下相片图表,同时从采样之前sample出新一些图表

然后把这些图表Generator所激发的相片标示为0,从原图表之前激发的相片标示为1,然后锻炼Discriminator:

那么Discriminator最终锻炼完出新的loss则与PG(x)和Pdata(x)的JS divergence有关,也就问道loss可以用来衡量两个属有多相同。

然后Generator则可以根据这个loss展开生命体时出新为第二代Generator。那么表达式是如何更属于自己呢?请注意举个比如说:

锻炼完出新Discriminator后,随机sample一个图表,拿走进Generator之前,然后激发一张相片,相片经过Discriminator,实为设此时Discriminator给的分数是0.13,那么此时Generator开始缩减表达式(注意此时Discriminator的表达式是固定不变的),使得所激发的相片拿走给Discriminator让其编码器值为1,然后完出新生命体时出新为Generator V2。

以上就是GAN的必需思想以及其特例表达式的比较通俗的解释。请注意给出新文献之前GAN的特例表达式:

"""

Generator:G,Discriminator: D

Initialize G θg, D θd(codice_时Generator和Discriminator的表达式)for each training sample m examples{x1, x2, .....,xm} from datanse;(从采样集之前sample出新一些图表)sample m noise samples {z1, z2, .....,zm} from a distribution;(从一种属之前sample出新一些图表)Obtaining generated data {x'1,x'2,......x'm},x'i=G(zi);(然后把z拿走进G之前激发一些相片)Fix G, update θd to maximize , (固定下到Generator的表达式,缩减Discriminator的表达式,这里并不一定使用这种方式备份,还有其他方式也就新创了其他特例表达式)sample m noise samples{z1,z2,......,zm} from a distribution;(再另外从某种属之前sample出新一些图表)Fix D, update to maximize;(固定下到Discriminator,缩减Generator的表达式,使得sample出新来的那些图表让Discriminator的分数越少高越少好)

"""

以上就是GAN的必需概念和特例表达式,这里就暂时对这部份内容讲解到这里,前面时会实质上开一节GAN有关其他的新创特例表达式及其意味着。

文中来自

泉州治疗白癜风的方法
福建哪家白癜风医院正规
泉州医院白癜风治疗哪家好
福建白癜风医院哪些好
泉州医院哪家白癜风医院好

上一篇: 首届中国篮球名人堂提名人人数30进10,刘克军任提名人委员会主任

下一篇: 900万欧!皇马有钱停不下,老佛爷运筹帷幄,第十二家赞助到手

相关阅读
东亚杯:中国男足战平日本的却是,藏着多少鲜为人知的秘密

东亚杯:西方男足下战平长崎的背后,珍藏着多少鲜为人知的秘密。网友热议一针见血地回事明有:这场热身赛的精气神是国足下的宝珍藏,被罐又怎么样,保持一致这个军威,不想让这个宝珍藏消退了。回事明了一点,

值得推荐的3款“千元旗舰”手机,称得上极致性价比,口碑也很不错

您在读到前代为点击里面的“注目”二字,早先亦会第一时间为您包括更多有价值的相关内容,感谢您的背书。虽然感叹极高端旗舰空的种系统耐用性更好,日常常用时亦会越发的简洁,不过极高端旗舰空

友情链接