机器学习 李宏毅 L15 L16-Hello world of deep learning

Keras简介

Keras 使用实例

使用MNIST数据集,数据集较小,可以用来做实验的样本。

#定义NN结构
model = Sequential()

model.add(Dense(input_dim=28*28,output_dim=500))
model.add(Activation('sigmoid')

model.add(Dense(output_dim=500))
model.add(Activation('sigmoid')

model.add(Dense(output_dim=10))
model.add(Activation('softmax')

#定义Loss function,定义optimizer(SGD RMSprop Adagrad Adadelta Adam Adamax Nadam)
model.compile(loss='categorical crossentropy',optimizer='adam',metrics=['accuracy'])

#寻找最优的网络参数 (back propagation)
model.fit(x_train,y_train,batch_size=100,nb_epoch=20)

#输出正确率
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)

操作过程是,首先取出batch_size个样本,实现该样本的最小loss function,这是一个batch。反复做batch优化,直到所有参数都进行了一次优化,称为一个epoch。注意,对于一个batch会更新一次参数。
如果batch_size=1,则变成了SGD。前面已经讲述了SGD由于更新次数多,所以其性能较好。而这里采用BGD,是由于实际操作的一些限制。对于batch size,越大的size代表每一个epoch需要的计算时间越短。而batch size较大时,更新参数较为稳定。这是一个trade-off。

由于GPU的并行能力,则batch-size较大时,与计算SGD的时间差不多。但是不能将batch-size设置过大,这样会导致GPU不能完成并行计算。同时,batch-size过大会导致更新会进入local-minima或者saddle point,而batch-size较小时会带来一些随机性,容易跳出一些不是很深的local-minima的情况。
实际的GPU矩阵运算如下图所示,对于batch中不同的数据,首先将数据进行组合生成一个新矩阵,然后对于矩阵进行操作,得到输出的矩阵,进行分解后就可以完成batch的计算。

更新后的keras部分代码

#定义NN结构
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'))

#定义Loss function,定义optimizer(SGD RMSprop Adagrad Adadelta Adam Adamax Nadam)
model.compile(loss='categorical crossentropy',optimizer='adam',metrics=['accuracy'])

#寻找最优的网络参数 输入均为 numpy.array
model.fit(x_train,y_train,batch_size=100,nb_epoch=20)

#输出正确率
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)

可参考资料和网址

  1. Keras-example
  2. Keras模型存取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值