16071070 _ 陈泽寅 _ 第六次作业:
一、简要概述
项目 | 内容 |
---|---|
课程 | 人工智能实战2019 |
作业要求 | 作业要求 |
我在这个课程的目标是 | 能够理解人工智能实践与理论框架,独立完成小项目 |
这个作业在哪个具体方面帮助我实现目标 | 理解不同参数对于网络性能的影响,加深对网络的理解 |
二、作业内容
a. 将模型准确度调整至>97%
b. 整理形成博客,博客中给出参数列表和对应值
c. 给出最终的loss下降曲线
d. 给出最终准确度结果
三、核心代码
以改变epoch为例
if __name__ == '__main__':
print("Loading...")
n_hidden1 = 128
n_hidden2 = 64
n_output = 10
learning_rate = 0.1
dataReader = LoadData(n_output)
n_images = dataReader.num_example
n_input = dataReader.num_feature
m_epoch = 10
batch_list= [5,10,20,50,100]
epoch_list = [10,20,30,40,50]
correct = []
n = [10,20,30,40,50]
print(n)
batch_size = 10
for i in range(5):
m_epoch = epoch_list[i]
dict_Param = InitialParameters3(n_input, n_hidden1, n_hidden2, n_output, 2)
dict_Param = Train(dataReader, learning_rate, m_epoch, n_images, n_input, n_output, dict_Param, forward3, backward3, update3, batch_size)
SaveResult(dict_Param)
rate = Test(dataReader, n_output, dict_Param, n_input, forward3)
correct.append(rate/10000.0)
plt.figure()
plt.plot(n,correct)
plt.xlabel("Epoch")
plt.ylabel("correctness")
plt.show()
一、尝试调整学习率
标号 | 学习率 | 隐藏层1神经元数 | 隐藏层2神经元数 | epoch次数 | batch_size | 测试集正确率 |
---|---|---|---|---|---|---|
1 | 0.05 | 64 | 32 | 10 | 10 | 0.9712 |
2 | 0.1 | 64 | 32 | 10 | 10 | 0.9748 |
3 | 0.2 | 64 | 32 | 10 | 10 | 0.9749 |
4 | 0.4 | 64 | 32 | 10 | 10 | 0.9705 |
5 | 0.8 | 64 | 32 | 10 | 10 | 0.9607 |
二、尝试调整batch_size
标号 | 学习率 | 隐藏层1神经元数 | 隐藏层2神经元数 | epoch次数 | batch_size | 测试集正确率 |
---|---|---|---|---|---|---|
1 | 0.1 | 128 | 64 | 10 | 5 | 0.9768 |
2 | 0.1 | 128 | 64 | 10 | 10 | 0.9784 |
3 | 0.1 | 128 | 64 | 10 | 20 | 0.9771 |
4 | 0.1 | 128 | 64 | 10 | 50 | 0.9675 |
5 | 0.1 | 128 | 64 | 10 | 100 | 0.9544 |
三、调整epoch
标号 | 学习率 | 隐藏层1神经元数 | 隐藏层2神经元数 | epoch次数 | batch_size | 测试集正确率 |
---|---|---|---|---|---|---|
1 | 0.5 | 128 | 64 | 10 | 10 | 0.9769 |
2 | 0.5 | 128 | 64 | 20 | 10 | 0.9809 |
3 | 0.5 | 128 | 64 | 30 | 10 | 0.9805 |
4 | 0.5 | 128 | 64 | 40 | 10 | 0.9795 |
5 | 0.5 | 128 | 64 | 50 | 10 | 0.9805 |
将batch_size调整为20
标号 | 学习率 | 隐藏层1神经元数 | 隐藏层2神经元数 | epoch次数 | batch_size | 测试集正确率 |
---|---|---|---|---|---|---|
1 | 0.5 | 128 | 64 | 10 | 20 | 0.9749 |
2 | 0.5 | 128 | 64 | 20 | 20 | 0.9803 |
3 | 0.5 | 128 | 64 | 30 | 20 | 0.9822 |
4 | 0.5 | 128 | 64 | 40 | 20 | 0.9798 |
5 | 0.5 | 128 | 64 | 50 | 20 | 0.9807 |
结论:
当我们选取参数为
- 学习率:0.5
- 隐藏层一:128
- 隐藏层二:64
- Epoch: 30
- batch_size:20
我们得到最佳的预测正确率为 98.22%.
四、Loss曲线
五:结论
我们可以看出在调整参数的过程中;适当增加神经元数目;降低学习率;增加循环次数可以提高测试集正确率;但是在改变参数如循环Epoch的次数,神经网络神经元个数时,也会导致训练时间的增大。