0%

weekly-report-20201113

学习内容

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经典例程进行了编程和仿真练习。

  1. Encoders
    1. Encoder - Using if-else Statement
    2. Encoder - Using case Statement
  2. Priority Encoders
    1. Pri-Encoder - Using if-else Statement
    2. Encoder - Using assign Statement
  3. Decoders
    1. Decoder - Using case Statement
    2. Decoder - Using assign Statement
  4. Mux