其他
【强基固本】神经网络结构下理解Logistic Regression &TF框架下构造Logistic实现Mnist分类
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
地址:https://www.zhihu.com/people/guo-qi-97-88
01
(1)式是一个标准的线性回归方程,有权重 和偏置 ,如果你不理解 和 意味着什么,我将用于训练的数据形式全部展开,你会顿然开悟:
此外
(2)-(3)式子是对标准线性回归方程做映射后,求其单个图片训练并做预测后,需要一个它的Loss_Function(损失函数),这里使用的是对分类问题用的比较多的交换熵,也可以用MSE 作为模型的损失函数。 (4)式子就是将总共m个方程的Loss加和,作为整个模型的Loss,接下来就是求偏导,然后对每一个权重和偏置参数作梯度下降\牛顿\拟牛顿 进行迭代更新,使得整个Loss减小,停止迭代后确定权重 和偏置
02
#数据的导入 来自 TF2 自带数据集
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train_image,y_train_label),(x_test_image,y_test_label)= mnist.load_data()
先把数据导入,TF自带Mnist,28x28灰度值图片。
#这种形式无法被线性模型识别
y_train_label
import numpy as np
#数据标签的处理,label需要被手动One_hot_encoding
def encode_one_hot(labels):
num = labels.shape[0]
res = np.zeros((num,10))
for i in range(num):
res[i,labels[i]] = 1 # labels[i]表示0,1,2,3,4,5,6,7,8,9,则对应的列是1。
return res
y_train_label=encode_one_hot(y_train_label)
y_test_label=encode_one_hot(y_test_label)
#成功映射
y_train_label[1]
#接着到数据本身的标准化,减少我可怜cpu的负载。
x_train_image = x_train_image / 255
x_test_image = x_test_image / 255
#初始化 权重和偏置
def Logistic():
Logistic=tf.keras.Sequential()
Logistic.add(tf.keras.layers.Flatten(input_shape=(28,28)))
Logistic.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax)) #输出10个神经元,softmax用于分类
return Logistic
model=Logistic()
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
_________________________________________________________________
dense (Dense) (None, 10) 7850
=================================================================
Total params: 7,850
Trainable params: 7,850
Non-trainable params: 0
_________________________________________________________________
#设置优化器、损失函数
model.compile(
optimizer = tf.keras.optimizers.SGD(lr = 0.1), #优化器
loss='binary_crossentropy', #损失函数,交叉熵
metrics=['accuracy'] #准确率
)
model.fit(x_train_image,y_train_label,epochs=60,batch_size=1000)
test_loss, test_acc = model.evaluate(x_test_image, y_test_label)
print('Test Acc:',test_acc)
Test Acc: 0.9006999731063843
“强基固本”历史文章
深入探究MMD距离
机器学习常用评价指标总览
信息量、熵、相对熵(KL散度)、交叉熵
神经网络常用求导
深度学习算法收敛性证明之拓展SGD
看了这篇文章你还不懂SVM你就来打我
卷积神经网络(CNN)反向传播算法
边框回归(Bounding Box Regression)详解
《CV中的多视图几何》——相机模型与标定
AI 框架基础技术之自动求导机制 (Autograd)
主成分分析(PCA)
深度学习算法收敛性证明
深度学习:数学知识基础
从Binary到Swish——激活函数深度详解
“卷积”其实没那么难以理解
更多强基固本专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!