• 神经网络常见概念总结


    激活函数:将神经网络上一层的输入,经过神经网络层的非线性变换转换后,通过激活函数,得到输出。常见的激活函数包括: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
  • 相关阅读:
    【c#】无法修改“xxx”的返回值,因为它不是变量
    【c#】在C#中属性不可作为 ref 或 out 参数传递
    【概念】浮点数
    【概念】Winform
    【概念】数据库、服务器、N层架构、.NET、上位机、C/S和B/S、MVC、ADO.NET
    【c#】串口通信汇总
    【总线】UART、Modbus、I2C、SPI、RS232、RS485及串口通讯常用参数
    zookeeper应用场景
    Zookeeper选举(fastleaderelection算法)
    ZAB协议
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/10077244.html
Copyright © 2020-2023  润新知