学习笔记:SAE TensorFlow代码
来源:互联网 发布:2016网络自制剧排行榜 编辑:程序博客网 时间:2024/05/29 12:57
栈式自编码:
一.基本原理
AE的原理是先通过一个encode层对输入进行编码,这个编码就是特征,然后利用encode乘第2层参数(也可以是encode层的参数的转置乘特征并加偏执),重构(解码)输入,然后用重构的输入和实际输入的损失训练参数。
对于我的应用来说,我要做的首先是抽取特征。AE的encode的过程很简单,是这样的:
SAE是这样的:
训练过程中,两个SAE分别训练,第一个SAE训练完之后,其encode的输出作为第二个SAE的输入,接着训练。训练完后,用第二层的特征,通过softmax分类器(由于分类器 还是得要带标签的数据来训练,所以,实际应用总,提取特征后不一定是拿来分类),将所有特征分为n类,得到n类标签。训练网络图
step 1
step 2
step 3
按照UFLDL的说明,在各自训练到快要收敛的时候,要对整个网络通过反向传播做微调,但是不能从一开始就整个网络调节。
两个SAE训练完后,每个encode的输出作为两个隐层的特征,然后重新构建网络,新网络不做训练,只做预测。网络如下:
from __future__ import division, print_function, absolute_importimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt# 下载并导入MNIST数据集from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data", one_hot=True)# 参数learning_rate = 0.01#学习率training_epochs = 20#训练的周期batch_size = 256#每一批次训练的大小display_step = 1# 神经网络的参数n_hidden_1 = 256 # 隐层1的神经元个数n_hidden_2 = 100 # 隐层2神经元个数n_input = 784 # MNIST数据集的输出(img shape: 28*28)n_output=10# tf Graph input (only pictures)X = tf.placeholder("float", [None, n_input])weights = { 'encoder_h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'encoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 'decoder_h1': tf.Variable(tf.random_normal([n_hidden_1, n_input])), 'decoder_h2': tf.Variable(tf.random_normal([n_hidden_2, n_hidden_1])), 'softmax_w': tf.Variable(tf.random_normal([n_hidden_2, n_output])),}biases = { 'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1])), 'encoder_b2': tf.Variable(tf.random_normal([n_hidden_2])), 'decoder_b1': tf.Variable(tf.random_normal([n_input])), 'decoder_b2': tf.Variable(tf.random_normal([n_hidden_1])), 'softmax_b': tf.Variable(tf.random_normal([n_output])),}#************************* 1st hidden layer **************X = tf.placeholder("float", [None, n_input])h1_out =tf.nn.sigmoid(tf.add(tf.matmul(X, weights['encoder_h1']), biases['encoder_b1']))keep_prob = tf.placeholder("float")h1_out_drop = tf.nn.dropout(h1_out,keep_prob)X_1 = tf.nn.sigmoid(tf.matmul(h1_out_drop,weights['decoder_h1'])+biases['decoder_b1'])loss1 = tf.reduce_mean(tf.pow(X - X_1, 2))train_step_1 = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss1)sess=tf.Session()sess.run(tf.variables_initializer([weights['encoder_h1'],biases['encoder_b1'], weights['decoder_h1'],biases['decoder_b1']]))# trainingfor i in range(training_epochs): batch_x,batch_y = mnist.train.next_batch(batch_size) _,c=sess.run([train_step_1,loss1],feed_dict={X:batch_x, keep_prob:1.0}) if i%5==0: print(c)#h1_out = tf.nn.sigmoid(tf.add(tf.matmul(X, weights['encoder_h1']),# biases['encoder_b1']))#get result of 1st layer as well as the input of next layer#************************** 2nd hidden layer ************* h2_x = tf.placeholder("float", shape = [None, n_hidden_1])h2_out = tf.nn.sigmoid(tf.matmul(h2_x,weights['encoder_h2']) + biases['encoder_b2'])h2_out_drop = tf.nn.dropout(h2_out,keep_prob)h2_in_decode = tf.nn.sigmoid(tf.matmul(h2_out_drop, weights['decoder_h2']) + biases['decoder_b2'])loss2 = tf.reduce_mean(tf.pow( h2_x- h2_in_decode, 2))train_step_2 = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss2)sess.run(tf.variables_initializer([weights['encoder_h2'],biases['encoder_b2'], weights['decoder_h2'],biases['decoder_b2']]))for i in range(training_epochs): #batch_x = numpy.reshape(batch_x,[batch_size,sample_length]) h1_out=[] batch_x,batch_y = mnist.train.next_batch(batch_size) temp=tf.nn.sigmoid(tf.add(tf.matmul(batch_x, weights['encoder_h1']), biases['encoder_b1'])) h1_out.extend(sess.run(temp)) _,c=sess.run([train_step_2,loss2],feed_dict={h2_x:h1_out,keep_prob:1.0}) if i%5==0: print(c)#h2_out = tf.nn.sigmoid(tf.matmul(h1_out,weights['decoder_h2']) + biases['decoder_b2'])#get result of 2nd layer as well as the input of next layer#************************** softmax layer ****************y_ = tf.placeholder("float", shape = [None, n_output])soft_x = tf.placeholder("float", shape = [None, n_hidden_2])y_out = tf.nn.softmax(tf.matmul(soft_x, weights['softmax_w']) + biases['softmax_b'])cross_entropy = -tf.reduce_sum(y_ * tf.log(y_out))train_step_soft = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)correct_prediction = tf.equal(tf.argmax(y_out, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))sess.run(tf.variables_initializer([weights['softmax_w'],biases['softmax_b']]))for i in range(training_epochs): h2_out=[] batch_x,batch_y = mnist.train.next_batch(batch_size) for i in range(batch_size): temp=tf.nn.sigmoid(tf.add(tf.matmul(batch_x[i].reshape([1,784]), weights['encoder_h1']), biases['encoder_b1'])) temp=tf.nn.sigmoid(tf.add(tf.matmul(temp, weights['encoder_h2']), biases['encoder_b2'])) h2_out.extend(sess.run(temp)) sess.run(train_step_soft,feed_dict={soft_x:h2_out, y_:batch_y, keep_prob:1.0}) if i%5 == 0: print(sess.run(accuracy, feed_dict={soft_x:h2_out, y_:batch_y, keep_prob:1.0}))#fine-tuningprint ("************************* fine-tuning ***************************")h1_out = tf.nn.sigmoid(tf.add(tf.matmul(X_1, weights['eecoder_h1']), biases['encoder_b1']))h2_out = tf.nn.sigmoid(tf.matmul(h1_out,weights['encoder_h2']) + biases['encoder_b2']) h2_out_drop = tf.nn.dropout(h2_out,keep_prob)y_out = tf.nn.softmax(tf.matmul(h2_out_drop, weights['softmax_w']) + biases['softmax_b'])cross_entropy = -tf.reduce_sum(y_ * tf.log(y_out))train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)correct_prediction = tf.equal(tf.argmax(y_out, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))for i in range(training_epochs): batch_x,batch_y = mnist.train.next_batch(batch_size) #batch_x = numpy.reshape(batch_x,[batch_size,sample_length]) sess.run(train_step,feed_dict={X:batch_x, Y:batch_y, keep_prob:0.5}) if i%5 == 0: print (sess.run(accuracy,feed_dict={X:batch_x, Y:batch_y, keep_prob:0.5}))print (sess.run(accuracy,feed_dict={X:batch_x, Y:batch_y, keep_prob:0.5}))
0 0
- 学习笔记:SAE TensorFlow代码
- TensorFlow学习资料:代码+笔记+教程
- [SAE学习笔记]捣鼓MySQL
- [SAE学习笔记]Storage尝鲜
- SAE J1939学习笔记(一)
- SAE J1939学习笔记(二)
- SAE J1939学习笔记(三)
- SAE J1939学习笔记(四)
- SAE J1939学习笔记(五)
- SAE 1939学习笔记(一)
- SAE 1939学习笔记(二)
- SAE 1939学习笔记(三)
- SAE J1939学习笔记(四)
- tensorflow学习笔记(二十六):构建TF代码
- tensorflow学习笔记(三十一):构建多GPU代码
- Tensorflow学习笔记--RNN精要及代码实现
- 深度学习(四十九)Tensorflow提高代码效率笔记
- TensorFlow学习笔记(二)---MNIST代码分析
- 洛谷 2023_[AHOI2009]维护序列_线段树
- 记一些问题
- codeforces 792 B. Counting-out Rhyme (模拟链表||约瑟夫环)
- eclipse 面包屑开关
- ios xcode 字体大全
- 学习笔记:SAE TensorFlow代码
- Erlang/OTP: 基于 Behaviour 的回调函数【转】
- A1063.Set Similarity
- 页面的分页(对之前上传的的代码的一种补充)
- Linux(2)简单的导航指令(下)绝对路径和相对路径
- 【JavaScript】2.JavaScript&html
- 算法基础篇(11)------平衡树
- 怪盗基德的滑翔翼
- PopUpWindow使用详解(一)——基本使用