激活函数:将神经网络上一层的输入,经过神经网络层的非线性变换转换后,通过激活函数,得到输出。常见的激活函数包括: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[ ]:
原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/10077244.html
时间: 2024-10-09 21:47:13