keras定义相关概念:
Keras是一个深度学习API,使用Python语言编写的github开源项目,主要开发者为谷歌工程师。Keras底层可调用不同的机器学习平台,如TensorFlow、Theano或micsoft-CNTK。
作用:keras主要功能是简化机器学习平台的调用方式。API可实现机器学习任务中的常见操作,包括人工神经网络的构建、编译、学习、评估、测试等。
人工神经网络(ANN)((Aritificial Neural Network)或联结主义系统是受构成动物大脑的生物神经网络的启发但不完全相同的计算系统。这种系统通过例子来“学习”执行任务,而不用特定于任务的规则进行编程。例如,在图像识别中,人工神经网络可能会通过分析一些图像样本来学习识别包含猫的图像,这些图像被手工标记为“猫”或“不是猫”,并使用结果识别在其他图像中的猫。
深度学习是一种利用多层神经网络来学习数据特征和规律的方法,它可以处理高维度、非结构化和复杂的数据,并实现强大的功能。
调用流程:
大概流程:根据输入(训练数据集)和输出(测试数据集),推测出中间逻辑和关系。训练数据集进行训练可以获得模型,而测试数据集主要用于测试模型的有效性
需求:使用深度学习来识别手写字识别
1.加载数据集。数据集包括:训练数据集和测试数据集
from keras.datasets import mnist
path = r'C:\Users\LEGION\Desktop\datasets\mnist.npz'
(X_train, y_train), (X_test, y_test) = mnist.load_data(path)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)
X_train.shape 的形状为(60000, 28, 28)
y_train.shape的形状为(60000,)
X_test.shape的形状为(10000, 28, 28)
y_test.shape的形状为(10000,)
2.构建模型
from keras.models import Sequential
from keras.layers import Dense,Activation
model = Sequential()
model.add(Dense(512, input_shape=(28*28,),activation='relu'))
model.add(Dense(10,activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=64, verbose=1, validation_split=0.05)
Testloss, Testaccuracy = model.evaluate(X_test, y_test)
print('Testloss ', Testloss)
print('Testaccuracy:', Testaccuracy)
- 第三行代码,定义模型类型,表示使用Keras中的Sequential 顺序模型。
- 第四行代码表示增加一个全连接层(密集层),这层有512个神经元,输入形状是(28*28,)此处的输入形状也可以写为:input_dim=28*28。Activation表示这层的激活函数使用是relu,不同的激活函数有不同的效果,大家可以自己学习。
- 第五行代码增加一个全连接层,这层有10个神经元,这于我们的期望输出个数一致(10个数字),激活函数使用softmax。
- 第六行代码表示编译我们之前构建的模型,优化器选择adam,损失函数为categorical_crossentropy,指标度量选择accuracy精度。
- 第七行代码表示使用训练集数据来训练我们的模型,epochs表示模型的训练的时期数,每个epoch是对x,y的整个迭代,这里迭代10次。batch_size代表每个梯度更新的样本数,默认值为32. verbose:日志显示verbose = 0为不在标准输出流输出日志信息,verbose = 1为输出进度条记录,verbose=2为每个epoch输出一行记录,默认为1。validation_split按一定比例从训练集中取出一部分作为验证集。最后一行控制台输出:loss: 0.0109 - acc: 0.9964 - val_loss: 0.0862 - val_acc: 0.9823
- 第八行代码表示对已经训练好的模型在验证集上进行评价,打印出验证集上的损失和精度为:loss 0.0794 ,Accuracy: 0.9784。
- 第八行后一般会出现model.predict([np.array([features[1]]), sentence]),预测
phthon基础
r
path = r'C:\Users\LEGION\Desktop\datasets\mnist.npz'
表示纯字符,无须用转义字符来表示反斜杠
shape
通俗易懂的解释:每一个shape里的数字对应数组中的一对中括号,第一个数字1表示最外层的中括号。以此类推,数字2表示第二层中括号,数字3表示最里层的中括号。
reshape
数组array的合并
astype
字符转数字
append
array添加数据,Released_dates.append(1960)
len()min() 和 max()
min(Released_dates)
X_train = X_train.astype('float32')/255
数学基础
二维数组的赋值:
向量:在Python中, 你通过中括号[ ]来创建一个向量. 向量元素用逗号分隔。向量元素必须是同一个数据类型。比如全是数字或文本。Released_dates = [1982,1980,1973,1992]
向量维度:
卷积公式:一种数算公式,它是一种将两个函数合并成一个新的函数的方法
思考:
数据集用什么工具生成,数据格式有什么要求
训练后的数据如何保存,如何在训练后的模型上进行识别
识别的命令是什么,输入参数是什么。
from keras.models import Input,Model
from keras.layers import Dense,Conv2D,TimeDistributed
input_ = Input(shape=(12,32,32,3))
out = TimeDistributed(Conv2D(filters=32,kernel_size=(3,3),padding='same'))(input_)
model = Model(inputs=input_,outputs=out)
model.summary()
卷积操作使用TimeDistributed,第一个12代表就是时间序列,32,32,3指的是高,宽,通道数。此处一共有896个参数,卷积核weights有3×3×3×32=864个,卷积核bias有32个。
上述的理解仅是个人的一些涉猎和体会,如有纰漏在所难免,欢迎对深度学习感兴趣的同学一起探讨,共同提高。