神经网络常见概念总结

激活函数:将神经网络上一层的输入,经过神经网络层的非线性变换转换后,通过激活函数,得到输出。常见的激活函数包括:sigmoid, tanh, relu等。https://blog.csdn.net/u013250416/article/details/80991831

为什么要引入非线性激活函数

如果不使用非线性激活函数,激活函数本质上相当于f(x)=ax+b。在这种情况下,神经网络每一层的输出都是上层输入的线性函数。此时,不管神经网络有多少层,输出与输入都是线性关系,与没有隐层是一样的。也就相当于最原始的感知机,连最基本的异或问题都无法解决,更别说其他更复杂的非线性问题。

损失函数:度量神经网络的输出的预测值,与实际值之间的差距的一种方式。常见的损失函数包括:最小二乘损失函数、交叉熵损失函数、回归中使用的smooth L1损失函数等。

优化函数:也就是如何把损失值从神经网络的最外层传递到最前面。如最基础的梯度下降算法,随机梯度下降算法,批量梯度下降算法,带动量的梯度下降算法,Adagrad,Adadelta,Adam等:https://blog.csdn.net/u013250416/article/details/81090059

梯度下降法:反向求导,调整w和b权重值,使得损失函数

 手写数字mnist数据集分类代码示例:

# coding: utf-8

# In[2]:

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


# In[3]:

#载入数据集
mnist = input_data.read_data_sets("MNIST_data",one_hot=True)

#每个批次的大小
batch_size = 100  # 一次性将100张图片放入这个神经网络中训练(以矩阵的形式放入)
#计算一共有多少个批次
n_batch = mnist.train.num_examples // batch_size

#定义两个placeholder
x = tf.placeholder(tf.float32,[None,784]) # 按批次传入值,那么none就会变成100
y = tf.placeholder(tf.float32,[None,10]) # y是标签

#创建一个简单的神经网络(只有输入和输出层,没有隐藏层)。784个输入和10个输出神经元
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
prediction = tf.nn.softmax(tf.matmul(x,W)+b)

#二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)

#初始化变量
init = tf.global_variables_initializer()

#结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#(equal函数的作用是比较其内的2个参数,相同返回true,不同返回false)argmax返回一维张量中最大的值所在的位置
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#cast函数的作用是类型转换,把布尔型转换为32位浮点型(true变为1.0,false变为0.0)

with tf.Session() as sess:
    sess.run(init)
    for epoch in range(21):#执行完一次这个for循环,相当于把训练集的图片计算了二十一次
        for batch in range(n_batch):#执行完一次这个for循环,相当于把训练集的图片计算了一次
            batch_xs,batch_ys =  mnist.train.next_batch(batch_size)#获得每个批次的100张图片,图片数据存在xs里,标签存在ys里
            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})#feed传进去的是测试集的图片以及对应标签
        print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))#每训练一次,打印准确率


# In[ ]:
View Code

猜你喜欢

转载自www.cnblogs.com/zhaoyanhaoBlog/p/10077244.html