学习内容 1、学习了循环神经网络模型,对其前向传播和反向传播进行了公式推导。对不同的RNN网络模型,比如一对一,一对多,多对一,多对多有了一个概念上的了解。
2、学习了RNN语言模型,知道语音识别系统怎样去选择一个正确的句子,从而提高语音识别的准确性。
3、学习了GRU单元和LSTM单元来解决长时间序列RNN网络中梯度消失的问题。GRU和LSTM相比,GRU更加简单,容易构建大规模的网络,运算速度也更快;LSTM更加强大和灵活。
4、学习了双向RNN网络模型,不仅能够获取之前的信息,还可以获取未来的信息进行预测。例如有这样两个句子,
①He said,”Teddy bears are on sale!”
②He said,”Teddy Roosevelt was a great Present!”
如果我们仅用前向的RNN网络来判断句子中出现的人名,那么在这个地方的第三个时间节点,两个句子给到前向网络的信息都是 He said Teddy,但是这个地方放一个是Teedy bear,一个是Teddy Roosevelt,只有句子②的Teddy是人民,也就是说,这个时候单向的RNN网络不能正确的预测结果。那么如果我们采用双向的RNN网络,那么我们不论在何时刻都能获取到整个句子的信息,能够更加准确的进行推断。
5、利用Tensorflow在MNIST手写字识别数据集上对RNN网络进行了实现,测试集上识别准确率达到0.979,代码如下:
该网络一共有28个lstm单元,每个28×28的图片分为28次输入网络,每次输入图片的一行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #载入数据集 mnist = input_data.read_data_sets("MNIST_data/",one_hot = True) n_inputs = 28 max_time = 28 lstm_size = 100 n_classes = 10 batch_size = 50 n_batch = mnist.train.num_examples // batch_size x = tf.placeholder(tf.float32,[None,784]) y = tf.placeholder(tf.float32,[None,10]) #RNN network weights = tf.Variable(tf.truncated_normal([lstm_size,n_classes],stddev=0.1)) biases = tf.Variable(tf.constant(0.1,shape=[n_classes])) inputs = tf.reshape(x,[-1,max_time,n_inputs]) lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(lstm_size) # final_state[0] cell state # final_state[1] hidden state outputs,final_state = tf.nn.dynamic_rnn(lstm_cell,inputs,dtype=tf.float32) prediction = tf.nn.softmax(tf.matmul(final_state[1],weights)+biases) cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y)) optimizer = tf.train.AdamOptimizer(1e-4) train_step = optimizer.minimize(cross_entropy) #结果存放在一个布尔型列表中 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #求准确率 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#把correct_prediction变为float32类型 #初始化 init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for epoch in range(60): for batch in range(n_batch): batch_xs,batch_ys = mnist.train.next_batch(batch_size) sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}) print ("Iter " + str(epoch) + ", Testing Accuracy= " + str(acc))
6、对Verilog经典例程进行了编程和仿真练习。
Encoders
Encoder - Using if-else Statement
Encoder - Using case Statement
Priority Encoders
Pri-Encoder - Using if-else Statement
Encoder - Using assign Statement
Decoders
Decoder - Using case Statement
Decoder - Using assign Statement
Mux