ai(八)-Keras
Keras
python编写的高级神经网络API,能够以TensorFlow,CNTK,或者Theano作为后端运行。
示例
Step1:定义模型

- 在Keras首先创建模型容器:
model=sequential() #线性堆栈模型
- 第一个隐藏层:
Dense(全连接层),输入维度28*28,该层拥有500个神经元
model.add(Dense(input_dim=28*28,output_dim=500))
model.add(activation('sigmoid'))
- 第二个隐藏层:输入就是上层的输出不用再说明。
model.add(Dense(output_dim=500))
model.add(Activation('sigmoid'))
- 输出层:
输出层10个神经元
model.add(Dense(output_dim=10))
model.add(Activation('softmax'))
Step2:模型评估

模型评估:
model.compile(loss=('categorical crossentropy'),optimizer='adam',metrics=['accuracy'])
- loss:定义损失函数(categorical crossentropy 多分类交叉熵)
- optimizer:优化器
- metrics:指标,(accuracy:直接显示预测正确样本数占总样本数的百分率)
Step3:最佳模型
3.1:Configuration(编译配置)

其他优化器备选:SGD, RMSprop, Adagrad, Adadelta, Adam, Adamax, Nadam。
3.2 寻找最优网络参数

model.fit(x_trian,y_trian,batch_size=100,nb_epoch=20)
Numpy是Python中 基础的科学计算库,Array(数组)是它最核心的数据结构。Numpy array在内存中是连续存放的,计算速度极快,非常适合处理成千上万张图片数据。
x_train:训练数据集
y_train:标签数据集
batch_size:批大小
nb_epoch:迭代轮数
mini bach的原理详解

做梯度下降和深度学习时,并不是最小化总损失,我们会将训练数据随机分成几个mini-batch。
步骤:
- 随机初始化神经网络的参数
- 先随机选择第一个batch出来,对选择出来的batch里面的总损失,计算偏微分,根据偏微分更新参数
- 然后随机选择第二个batch出来,对选择出来的batch里面的总损失,计算偏微分,根据偏微分更新参数
- 反复上述过程,直到将所有的batch统统过一次,一个epotch才算结束。
假设有100个batch,就将参数更新100次,也就是所有batch都遍历一遍才叫做一个epotch。
使用minibatch的原因:speed
batch越小意味着在一轮迭代中有更多的参数更新次数
- 很大的batch_size会导致很差的表现(不能设置太大也不能设置太小)

为什么批量梯度下降比随机梯度下降要快?因为计算机的平行计算(矩阵运算)会使计算速度快很多。
- 随机梯度下降:两个矩阵x分开计算
- mini batch:将两个x合并在一起,一起计算得到Z1Z^1Z1和Z2Z^2Z2 ,对CPU来说上面的运算时间是下面运算时间的两倍。(用上mini batch和GPU的时候速度加快的原理,只用GPU没用。)
GPU:图形处理器(比CPU相比能够做大量数据的简单计算) minibatch:将数据打包给GPU一起处理
模型保存和使用
#case1:测试集正确率
score=model.evaluate(x_test,y_test)
print("Total loss on Testing Set:",score[0])
print("Accuracy of Testing Set:",score[1])
# case2:模型预测
result=model.predict(x_test)
例子:手写数据识别
创建网络
先立草稿,输入是28*28 向量,输出对应0~9,也就是10维。假设有两层隐藏层,每层有500个神经元。
#创建网络
model=Sequential()
#添加第一个隐藏层
model.add(Dense(input_dim=28*28,units=500,activation='relu'))
#添加第二个隐藏层
model.add(Dense(units=500,activation='relu'))
#输出层
model.add(Dense(units=10,activation='softmax'))
- input_dim:输入维度
- units:隐藏层的神经元
配置
定义损失函数,选择优化器(optimizer),评估指标metrics
model.compile(loss='categorical crossentropy',optimizer='adam',metrics=['accuracy'])
选择最好的方程
model.fix(x_train,y_train,batch_size=100,epochs=20)
开始使用梯度下降训练模型。此时:
- x_train:二维数组,一个轴表示样本,另一个轴表示每个样本用多长的向量表示
- y_train:二维数组,一个轴表示样本,另一个轴表示对应不同case的值。只有一个维度是为1,另外的维度为0。第N维为1就表示待识别的数字为1

使用模型
存储和载入模型
官方文档:
http://keras.io/getting-started/faq/#how-can-i-save-a-keras-model
使用搭建的神经网络,对应不同的情景:
- 评估:
score=model.evaluate(x_test,y_test)
print('Total loss on Testing Set:',score[0])
print('Accuracy of Testing Set:',score[1])
- 预测:(没有正确答案,直接根据输入预测结果)
result=model.predict(x_test)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)