4.20-“Hello World“ of deep learning-Keras

这里是以keras为例子,用的是mnist手写数字识别为数据集。
还是熟悉的三步,首先第一步先宣告一下model。然后就可以开始添加层了,比如这里有两个hidden layer,每个layer有500个neuron,那么就定义成
model.add( Dense( input_dim=28*28,output_dim=500 ) )
model.add( Activation('sigmoid') )
这就定好了第一层,28*28是因为MNIST里面的图片是28*28的,然后这一层是500个neuron,所以输出是500维的。然后激活函数是sigmoid,当然还可以是其他的。Dense的意思是输入和第一层之间是全连接的,full connect。
下一层的输入直接就是上一层的输出,都是500,所以不必再定义,直接定义输出的维度,也就是这一层的neuron个数。
model.add( Dense( output_dim=500) )
model.add( Activation('sigmoid') )
这里最后是数字分类,所以输出要在0-9这10个数字里面,所以输出是10维的,我们在最后给他定义一下输出的维度。然后输出层其实也可以用sigmoid,但是这里用了softmax。
model.add( Dense( output_dim=10) )
model.add( Activation('softmax') )
然后就是第二步,定义loss。这里就是直接调用就可以了,比如这里的crossentropy就是前面讲到的y估计值与y真实值之间怎么算的时候提到的交叉熵的算法。
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
然后这句代码也定义了开始训练的第一步:adam就是提到的梯度下降自动调整学习速率+动量的那种寻找最小loss的方法,当然也还有其他的方法,下面写了。accuracy就是精确度。
开始训练的第二步是定义训练的输入量和其他超参数,如下。这里的x_train就是一张张图片img,y_train就是图片实际对应的数字,batch和epoch就不用说啦。
另外在读的时候,img是村成了下面所示的numpy array的(怎么存其实我还不知道),它的一个维度是img的张数,一个维度是图片的像素点数,这里是28*28。
y_train的就好理解了,横轴是img个数,竖轴是用一个数组表示了,是5的话,5的位置就是1,其他地方就是0。
model.fit(x_train, y_train, batch_size=100, nb_epoch=20)
然后就是之前也讲过的,batch size的选取,按道理是设为1是最好的,参数会更更新的很快,但是由于今天GPU的出现,让size为1和10计算一次是一样的速度,那儿这样的话,size为10,跑完一个epoch反而会更快,所以不是单纯的选1就是最好的。然后这种选比较小的batch的方法就叫mini-batch。当然要配合GPU使用
最后就是关于结果的输出了,keras里面有两种,第一种是都输出,然后会自动给计算准确率
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值