b-train.py是一个三层神经网络的训练程序。
包括训练数据的导入
datapath = 'homework.mat'
data = sio.loadmat(datapath)
预处理:
train_data_c1 = np.concatenate([train_data_c1, np.ones((train_data_c1.shape[0], 1))], axis=1)
train_data_c2 = np.concatenate([train_data_c2, np.ones((train_data_c2.shape[0], 1))], axis=1)
以上是加偏置维.
train_data = np.concatenate([train_data_c1, train_data_c2], axis=0)
train_scaled = list(preprocessing.scale(train_data))
train_data = list(train_data)
以上是标准化,即将训练数据的均值化为0,方差化为1.
正式训练前,对数据进行随机打乱(shuffle)也是非常必要的:
train_datalabel = list(zip(train_data, train_scaled, train_label))
random.shuffle(train_datalabel)
train_data, train_scaled, train_label = zip(*train_datalabel)
还包括NNetwork类的定义,包括forward和backward两个函数,分别进行前向运算和反向传播、批量梯度更新。
还有精度计算函数accuracy的定义。
以及迭代更新,当迭代次数小于给定值或者损失函数对权重的梯度变化未小于阈值时,迭代将持续。
while iter_num <= opt.iteration:
latest_loss = 0.5 * np.sum(np.sum((train_label - output) ** 2, axis=0))
loss.append(latest_loss)
latest_acc = accuracy(output, train_label)
acc.append(latest_acc)
print(iter_num-1, 'iteration: loss=', latest_loss, 'accuracy=', latest_acc)
delta_weight1, delta_weight2 = nn.backward(train_scaled, train_label, z1, a1, z2, output, opt.learning_rate)
z1, a1, z2, output = nn.forward(train_scaled)
iter_num +=1
if np.all(delta_weight1) < opt.criterion and np.all(delta_weight2) < opt.criterion:
break
训练结束时可视化训练过程中loss和accuracy的变化,调用data_visual函数画出真实的数据标签以及分类后的数据标签。
并保存模型参数即两层的权重,方便测试。
另外训练程序还引入命令行解析模块,方便在命令行中对训练时的学习率,阈值, 迭代次数,隐含层节点数进行调节。
parser.add_argument('-lr', '--learning_rate', default=0.0001,type=list,
help="learning rate for training")
parser.add_argument('-cr', '--criterion', default=0.1,type=float,
help="criterion for stopping training")
parser.add_argument('-it', '--iteration', default=20,type=int,
help="iteration number")
parser.add_argument('-hidden', '--hidden_layer', default=30,type=int,
help="hidden layer number")
b-test.py是测试程序
同样包括测试数据的导入、相同的预处理。
定义NNetwork类(精简地,不含backward函数)的一个对象,并载入已训练模型的权重,基于前向计算的结果计算loss和accuracy
f = h5py.File('model_weights.hdf5','r')
weight1 = f['weight_1']
weight2 = f['weight_2']
nn = NNetwork([weight1.shape[0], weight2.shape[0], weight2.shape[1]], weight1, weight2)
output = nn.forward(test_scaled)
loss = 0.5 * np.sum(np.sum((test_label - output) ** 2, axis=0))
acc = accuracy(output, test_label)
并可视化loss、accuracy和数据散点图。
data_visualize.py定义data_visual函数:
它输入数据,标签和分类结果
输出数据原本的和分类后的散点图,第一类的点标为红,第二类的点标为绿。
简单三层全连接神经网络做二分类问题批量梯度下降结果可视化
需积分: 49 96 浏览量
2018-12-18
21:51:23
上传
评论 1
收藏 329KB RAR 举报
zhouqiongyi
- 粉丝: 8
- 资源: 3
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈