笑而不语的谁
笑而不语的谁
签名是一种态度,我想我可以更酷...
关注数: 8
粉丝数: 27
发帖数: 542
关注贴吧数: 43
【学生证寻主】 周日在明孝陵景区捡到一张学生证 姓名 张政 机械工程学院 大四 希望有认识的同学转告,好予以交换。
找室友4缺二 IQ Fenton,23/24学年找新室友。 Flat楼层合适,价格也很优惠,房间敞亮。
【李宏毅 机器学习】GAN 网络的一些困惑 是这样的,在前几次课,李sir从V(G,D)通过固定G来求解D*,然后得出V(G,D*)可以写成-2log2+(一个JS散度的公式),我想问的是,这里李sir是直接理论推导出V(G,D*)可以用JS散度来表示,但是如果我要用别的散度,比如说KL-divergence的话,那岂不是推不出来了? 我这里有点疑惑,因为后面的课他又介绍了fGAN,通过凸函数的性质可以替换不同的divergence来求解。 总结下,我就是觉得通过推导,应该推出一个比较general的公式,然后可以替换不同的的DIV,而不是直接推出JS,我不知道我哪里理解的不对,希望help我一下。
[MLE推导出KL] 李宏毅网课,提问 问题如下,在讲GAN推导的时候,李老师将MLE推导成KL公式,我不太理解导数第二行的约等于的那一步,应该怎么简单理解呢,希望大家可以帮助我理解一下,谢谢。
BN网络的一个问题 BN网络的算法核心就是gama beta 的数据重构,让网络自身学习这两个参数,然后恢复前一层学到的数据特征,那我的疑惑是,既然都要恢复成原来数据的分布,为什么还要将数据一开始归一化呢?? 这一点我不是很理解。希望大家指正。
cifar100上,loss在epoch为2时候开始陡然下降,acc也突然为1. 大致如下,我建立了一个5层conv,2层fc的深度网络对cifar100进行学习。epoch=50,adam(lr=1e-3) 我将60k的数据,分为50k为train,然后10k为test 其中再把50k中分为train_data 和 validation_data,比例为9:1 当我没有分出来validation数据的时候,运行的很顺畅,但是当我在每一次epoch开始的时候随机打乱数据分为train和validation数据后,就开始出现问题了。当epoch为2时候,在validation上的acc竟然已经开始达到100%了 ,最后在test上的acc却只为1%。我实在是新手,也找不到bug出在哪儿,希望大佬们可以赐教。
loss很快为0,如何解决 大致如下,我建立了一个5层conv,2层fc的深度网络对cifar100进行学习。epoch=50,adam(lr=1e-3) 我将60k的数据,分为50k为train,然后10k为test 其中再把50k中分为train_data 和 validation_data,比例为9:1 当我没有分出来validation数据的时候,运行的很顺畅,但是当我在每一次epoch开始的时候随机打乱数据分为train和validation数据后,就开始出现问题了。当epoch为2时候,在validation上的acc竟然已经开始达到100%了 ,最后在test上的acc却只为1%。我实在是新手,也找不到bug出在哪儿,希望大佬们可以赐教。 代码如下(我是在colab上跑的) import tensorflow as tf from tensorflow.keras import layers, optimizers, datasets, Sequential import os tf.random.set_seed(2345) conv_layers = [ # 5 units of conv + max pooling # unit 1 # 64 means: every conv layer has 64 kernels layers.Conv2D(64, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.Conv2D(64, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2,2], strides=2, padding='same'), # unit 2 layers.Conv2D(128, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.Conv2D(128, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2,2], strides=2, padding='same'), # unit 3 layers.Conv2D(256, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.Conv2D(256, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2,2], strides=2, padding='same'), # unit 4 layers.Conv2D(512, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.Conv2D(512, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2,2], strides=2, padding='same'), # unit 5 layers.Conv2D(512, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.Conv2D(512, kernel_size=[3,3], padding='same', activation=tf.nn.relu), layers.MaxPool2D(pool_size=[2,2], strides=2, padding='same'), ] fc_layers = [ layers.Dense(256, activation=tf.nn.relu), layers.Dense(256, activation=tf.nn.relu), layers.Dense(100, activation=None), ] def preprocess(x,y): x = tf.cast(x,dtype=tf.float32)/255. #[0-1] y = tf.cast(y,dtype=tf.int32) return x,y # load data # x:[50k,32,32,3], x_test:[10k,32,32,3] (x,y),(x_test,y_test) = datasets.cifar100.load_data() y = tf.squeeze(y,axis = 1) y_test = tf.squeeze(y_test,axis = 1) test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)) test_db = test_db.map(preprocess).batch(64) #[b,32,32,3]=>[b,1,1,512] conv_net = Sequential(conv_layers) conv_net.build(input_shape=[None,32,32,3]) fc_net = Sequential(fc_layers) fc_net.build(input_shape=[None,512]) optimizer = optimizers.Adam(lr = 1e-4) # combine the variables of the conv net and fully connected net variables = conv_net.trainable_variables + fc_net.trainable_variables for epoch in range(50): idx = tf.range(50000) idx = tf.random.shuffle(idx) # train_num : validation_num => 0.9: 0.1 x_train, y_train = tf.gather(x, idx[:45000]), tf.gather(y, idx[:45000]) x_val, y_val = tf.gather(x, idx[-5000:]), tf.gather(y, idx[-5000:]) print('train data', x_train.shape, y_train.shape, 'validation data',x_val.shape, y_val.shape) train_db = tf.data.Dataset.from_tensor_slices((x_train,y_train)) train_db = train_db.map(preprocess).shuffle(10000).batch(64) val_db = tf.data.Dataset.from_tensor_slices((x_val,y_val)) val_db = val_db.map(preprocess).shuffle(10000).batch(64) for step, (x,y) in enumerate(train_db): with tf.GradientTape() as tape: # [b,32,32,3] => [b,1,1,512] out = conv_net(x) # [b,1,1,512] => [b,512] flatten out = tf.reshape(out,[-1,512]) # [b,512] => [b,100] logits = fc_net(out) # y: [b,]=>[b,100] y_onehot = tf.one_hot(y, depth=100) # compute loss loss = tf.losses.categorical_crossentropy(y_onehot,logits, from_logits=True) loss = tf.reduce_mean(loss) grads = tape.gradient(loss, variables) optimizer.apply_gradients(zip(grads, variables)) if step%100 == 0: print('epoch:',epoch,'step:',step,'loss:',float(loss)) # validation part total_num = 0 total_correct = 0 for x,y in val_db: out = conv_net(x) out = tf.reshape(out,[-1,512]) logits = fc_net(out) prob = tf.nn.softmax(logits, axis=1) pred = tf.argmax(prob, axis=1) pred = tf.cast(pred, dtype=tf.int32) correct = tf.cast(tf.equal(pred,y),dtype=tf.int32) correct = tf.reduce_sum(correct) total_num += x.shape[0] total_correct += int(correct) acc = total_correct / total_num print('in validation data','epoch:',epoch,'acc=',acc) # use test data to do the prediction total_num = 0 total_correct = 0 for x,y in test_db: out = conv_net(x) out = tf.reshape(out,[-1,512]) logits = fc_net(out) prob = tf.nn.softmax(logits, axis=1) pred = tf.argmax(prob, axis=1) pred = tf.cast(pred, dtype=tf.int32) correct = tf.cast(tf.equal(pred,y),dtype=tf.int32) correct = tf.reduce_sum(correct) total_num += x.shape[0] total_correct += int(correct) acc = total_correct / total_num print('in test data','acc=',acc)
关于蒙特卡洛方法的初学问题 各位好,初学者又来啦。最近在学习monte carlo 采样方法,有以下几点疑问,可能是我太钻牛角尖,但是真的不能自己弄明白:以上是老师的板书 问题背景:在机器学习或者 深度学习方面,蒙特卡洛被使用的背景理解,因为网上都是关于什么求位置面积的解释,在这里不太用得到。我理解了一下,为什么会引入蒙特卡洛方法。通过贝叶斯公式p(z|x)=p(x|z)p(z)/p(x),其中,p(x)展开后是一个积分项很难求,因此造成左边后验p(z|x)不好求得,因此才要引入蒙特卡洛方法进行采样。 问题1:为什么老师在讲到采样方法时候,说p(z)已知?我知道montecarlo方法是已知概率,然后来采样,但是我不能理解这个已知概率是设出来的么还是怎么假设出来的?老师又说,p(z)已知,但是图像很难画出来,这个我就很费解了。另外,在实际过程中,p(z)是怎么被假设出来的呀????希望大佬可以从机器学习的方面给我解释下,最好也解释下具体是怎么使用monte carlo采样的。跪谢跪谢
概率积分推导 请问一下积分怎么理解啊
希望大佬可以帮我解释下,为什么这个积分等式可以成立,谢谢!
学到马氏链的时候,老师给了一个这个公式,我不是很能理解,希望大佬可以帮助下,多谢!
贝叶斯网络 初学的困惑 最近刚刚学到贝叶斯网络,笔记如图。 有一点不是很明白。 如图是一个tail to tail的局部示意图。 就是为什么当a被观测到的时候,可以理解成c和b相互独立。 首先怎么理解被观测,因为老师课上讲的是被观测,我查阅资料有人说的是 已知,不知道怎么理解比较好。 其次,如果我什么都没学,从图中,我会理解成,如果a未被观测到,就说明没有a,也就没有a和b c之间的链接弧,那b c不是相互独立么? 希望大佬可以比较仔细的就纠正下我的理解。 谢谢你们
关于交叉熵 对于交叉熵函数的学习规则,如果输出节点的激活函数是sigmoid,那么增量等于输出误差. e = d - y; delta = e; 与前面的示例代码不同,这里不再使用sigmoid函数的导数。 Unlike the previous example code, the derivative of the sigmoid function no longer exists. 这是因为,对于交叉熵函数的学习规则,如果输出节点的激活函数是sigmoid,那么增量等于输出误差。 请问下,这个delta=e是怎么通过sigmoid函数以及交叉熵计算出来的
1
下一页