深度学习之--神经网络基础

本文深入探讨了神经网络的基础,重点介绍了前馈神经网络和各种激活函数。前馈神经网络是最简单的神经网络形式,由输入层、隐藏层和输出层构成,激活函数是网络非线性建模能力的关键。文章详细讨论了sigmoid、tanh、ReLU及其变体Leaky ReLU和ELU等激活函数的定义、特点和优缺点,强调了它们在防止梯度消失和提高模型表达能力方面的作用。最后,简要提到了正则化方法,如参数范数惩罚,以及其在防止过拟合中的作用。
摘要由CSDN通过智能技术生成

一、前馈神经网络


概念:前馈神经网络、网络层数、输入层、隐藏层、输出层、隐藏单元、激活函数

前馈神经网络:前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。

网络层数:一般是指设置或者搭建的模型有多少层。以上图为例,网络层为3。注:一般不包括输入层。

输入层:一般指数据输入模型的一层,如图中 Layer L1 层。

输出层:一般指模型的最后一层,即Layer L4 层;

隐藏层:指除开输入层和输出层之外的中间层,如图Layer L2 层和 L3层;

隐藏单元:一般指隐藏层中的单元结构。

å¨è¿éæå¥å¾çæè¿°

激活函数:一般指加权之后的值到输出之间函数,通过激活函数将上一层的输出作为下一层输入之前进行非线性变化,使模型不再是单一的线性变换。

二、简单的神经网络(tensorflow)


前期准备

通过二层的全连接网络,实现 mnist 数据集分类任务。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist_path = '/home/jie/Jie/codes/tf/datasets/MNIST_data/'
mnist = input_data.read_data_sets(mnist_path, one_hot=True)

# 定义超参数和其他常量
n_input = 784            # 28 * 28
n_classes = 10

max_epochs = 10000
learning_rate = 0.5
batch_size = 10
seed = 0
n_hidden = 30 

## Sigmoid 函数的导数
def sigmaprime(x):
    return tf.multiply(tf.sigmoid(x), tf.subtract(tf.constant(1.0), tf.sigmoid(x)))

# 为训练数据创建占位符
x_in = tf.placeholder(tf.float32, [None, n_input], name='x_in')
y = tf.placeholder(tf.float32, [None, n_classes], name='y')

# 创建模型
def multilayer_perceptron(x, weight, biases):
    h_layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['h1'])
    out_layer_1 = tf.sigmoid(h_layer_1)

    h_out = tf.add(tf.matmul(out_layer_1, weights['h2']), biases['h2'])
    return tf.sigmoid(h_out), h_out, out_layer_1, h_layer_1

# 权重
weights = {
    'h1':tf.Variable(tf.random_normal([n_input, n_hidden], seed=seed)),
    'h2':tf.Variable(tf.random_normal([n_hidden, n_classes], seed=seed))}
# 偏置
biases = {
    'h1':tf.Variable(tf.random_normal([1, n_hidden], seed=seed)),
    'h2':tf.Variable(tf.random_normal([1, n_classes], seed=seed))}

# 正向传播
y_hat, h_2, o_1, h_1 = multilayer_perceptron(x_in, weights, biases)

# loss function
err = y - y_hat
loss = tf.reduce_mean(tf.square(err, name='loss'))

# 反向传播
delta_2 = tf.multiply(err, sigmaprime(h_2))
delta_w_2 = tf.matmul(tf.transpose(o_1), delta_2)

wtd_error = tf.matmul(delta_2, tf.transpose(weights['h2']))
delta_1 = tf.multiply(wtd_error, sigmaprime(h_1
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值