【神经网络学习笔记1】利用tensorflow完成的简单BP神经网络&超参数简单分析

本文通过tensorflow实现BP神经网络解决二分类问题,探讨学习率、样本数量等超参数对模型性能的影响。实验结果显示,学习率不宜过大或过小,样本数量需足够以保证模型拟合效果。深度和广度对准确率影响较小,可能与随机样本选取有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜鸡分享一下自己的学习历程

由于网上有很多对神经网络的更为详细和深度的介绍,在我的文章中更重于对结果的探讨而不是原理的理解(其实我自己也不明白咋回事手动滑稽)

这次利用的是tensorflow官方所给出的样例代码,用于解决mnist问题。tensorflow给的代码注释很清晰,很方便新手在此基础上直接对神经网络结构进行修改。

tensorflow官方样例 BP神经网络

本篇文章解决的将是较为简单的平面点二分类问题,因为这个问题较为简单,并且更为直观。为了方便输入,我这里采用的是生成一个随机数组来做feed_dict,因为用的是np.random.random,也就是随机选取了二维平面[0,1][0,1]上的点,可以保证各区域的点出现均匀,但由于每次运行都不是同一组数据,会导致每次结果都不一样,这是因为每次梯度下降后所到达的极值位置不同,因此不算是标准的样本,但足以用于较为简单的分析中。

在tensorflow所给出的样例中,我们不难总结到神经网络结构主要有以下几个超参数:

1. learning_rate 学习率,决定梯度下降的速度

2. num_step 学习的样本数量

3. batch_size 随机梯度下降中每步中所选取的样本数量(因为用的普通笔记本,太大的计算量承受不起,微笑中透漏着贫穷)

4. 神经网络的深度(层数)

5. 神经网络的广度(每层神经元数量)

6. 激活函数种类,主要有softmax,relu,sigmoid,tanh等,官方样例中给的是softmax

本篇文章主要讨论1.2.等(易于讨论出结果的,手动滑稽)问题。

以下是我的代码,五层结构,每层10个神经元,中间加了loss和acc的可视化,可以帮助理解神经网络结构是如何逐渐减小误差提高准确率的,最后面加了最终分类结果的可视化,同时算是均匀地选取区域内的点作为test去算accuracy。函数classifier是用于定义自己想要的分类区域(当然是可以用函数描述的),我这里选取的边界曲线全都是非线性的,并且还分开了,一个是圆,另一个是四次函数。

from __future__ import print_function
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# Parameters
learning_rate = 0.01
num_steps = 1000
batch_size = 100
display_step = 100

# Network Parameters
n_hidden_1 = 10 # 1st layer number of neurons
n_hidden_2 = 10 # 2nd layer number of neurons
n_hidden_3 = 10 # 3rd layer number of neurons
n_hidden_4 = 10 # 4th layer number of neurons
n_hidden_5 = 10 # 5th layer number of neurons
num_input = 2 # data input (img shape: 2)
num_classes = 2 # total classes (2 digits)

# tf Graph input
X = tf.placeholder("float", [None, num_input])
Y = tf.placeholder("float", [None, num_classes])

# Store layers weight & bias
with tf.name_scope('parameters'):
    weights = {
        'h1': tf.Variable(tf.random_normal([num_input, n_hidden_1])),
        'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
        'h3': tf.Variable(tf.random_normal([n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值