人工神经网络也简称为神经网络,是一种模仿和生物神经网络结构和功能的计算模型。经典的神经网络结构包含三个层次的神经网络。分别为输入层,输出层以及隐藏层
其中每层的圆圈代表一个神经元,隐藏层和输出层的神经元有输入的数据计算后输出,输入层的神经元只需输入
感知机就是模拟这样的大脑神经网络处理数据的过程,感知机模型如下图:
感知机是一种最基础的分类模型,类似于法逻辑回归,不同的是,感知机的激活函数用的是sign,而逻辑回归用的是sigmoid,感知机也具有连接的权重和偏置
sign函数9
任意画一条对角线来分隔两组数据点,定义一个阈值以确定每个数据点属于哪一个组
其中b是确定线的位置的阈值,通过分别对x1和x2赋予权重w1和w2,就可以进行分类了
红色划分 与,绿色划分 或
softmax回归将神经网络输出转换成概率结果
为了能够衡量距离,目标值需要进行one-hot编码,能与概率值一一对应,如下图:
yi’ 是真实值,yi 是输出的结果
-0*log0.1-0*log0.05-…-1*log0.1=1
上述的结果是1*log(0.1),那么为了减少这个样本的损失,神经网络应该提高对应目标值为1的位置输出概率的大小,由于softmax公式的影响,其他的概率必定会减少,进行这样的调整就能预测成功了。
TensorFlow框架自带了获取这个数据集的接口,所以不需要自行读取
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
def full_connection():
"""
用全连接来对手写数字进行识别
:return:
"""
#1.准备数据
mnist=input_data.read_data_sets("./mnist_data",one_hot=True)
x=tf.placeholder(dtype=tf.float32,shape=(None,784))
y_true=tf.placeholder(dtype=tf.float32,shape=(None,10))
#2.构建模型
Weights=tf.Variable(initial_value=tf.random_normal(shape=[784,10]))
bias=tf.Variable(initial_value=tf.random_normal(shape=[10]))
y_predict=tf.matmul(x,Weights)+bias
#3.构造损失函数
error=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true,logits=y_predict))
#4.优化损失
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
#初始化变量
init=tf.global_variables_initializer()
#开启会话
with tf.Session() as sess:
sess.run(init)
image,label=mnist.train.next_batch(100)
print("训练之前,损失为%f"%sess.run(error,feed_dict={x:image,y_true:label}))
#开始训练
for i in range(100):
_,loss=sess.run([optimizer,error],feed_dict={x:image,y_true:label})
print("第%d次的训练,损失为%f"%(i+1,loss))
if __name__ == "__main__":
full_connection()
比较输出结果最大值所在位置和真实值的最大值所在位置
y_true的形状:(None,10)
tf.argmax(y_true,1)
tf.argmax(y_predict,1)
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
def full_connection():
"""
用全连接来对手写数字进行识别
:return:
"""
#1.准备数据
mnist=input_data.read_data_sets("./mnist_data",one_hot=True)
x=tf.placeholder(dtype=tf.float32,shape=(None,784))
y_true=tf.placeholder(dtype=tf.float32,shape=(None,10))
#2.构建模型
Weights=tf.Variable(initial_value=tf.random_normal(shape=[784,10]))
bias=tf.Variable(initial_value=tf.random_normal(shape=[10]))
y_predict=tf.matmul(x,Weights)+bias
#3.构造损失函数
error=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true,logits=y_predict))
#4.优化损失
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
#5.准确率计算
#比较输出结果最大值所在位置和真实值的最大值所在位置
equal_list=tf.equal(tf.argmax(y_true,1),tf.argmax(y_predict,1))
accuracy=tf.reduce_mean(tf.cast(equal_list,tf.float32))
#初始化变量
init=tf.global_variables_initializer()
#开启会话
with tf.Session() as sess:
sess.run(init)
image,label=mnist.train.next_batch(100)
print("训练之前,损失为%f"%sess.run(error,feed_dict={x:image,y_true:label}))
#开始训练
for i in range(4000):
_,loss,accuracy_value=sess.run([optimizer,error,accuracy],feed_dict={x:image,y_true:label})
print("第%d次的训练,损失为%f,准确率为%f"%(i+1,loss,accuracy_value))
if __name__ == "__main__":
full_connection()