tensorflow学习笔记_0003_Keras

一、概述

本博文基于tensorflow的官方指南,演示一个keras的使用例子,环境为win10+spyder3.3.3+python3.6。

keras的定义:用一句很通俗的话来说,就是tensorflow中的高阶API,实际开发中会更方便易用。

二、代码演示

1、检测Keras版本

Keras需要单独安装,如果没有安装的话,可以在Anaconda Prompt中键入以下命令,然后重启下spyder即可。

pip install keras

安装完之后,我们可以看下版本号。

import tensorflow as tf
from tensorflow.keras import layers

print(tf.VERSION)
print(tf.keras.__version__)


#######################以下是运行结果#######################
1.12.0
2.1.6-tf

可以看到,我用的tensorflow版本是1.12.0,keras版本为2.1.6-tf

2、构建三层神经网络模型

一般使用Sequential接口来构建模型,首先,创建一个Sequential对象。

model = tf.keras.Sequential()

然后使用add方法增加单层网络结构,比如输入层构建为一个64节点relu激活函数的densely层

model.add(layers.Dense(64, activation='relu'))

隐藏层也一样为64节点relu激活函数的densely层

model.add(layers.Dense(64, activation='relu'))

输出层构建为 10节点的softmax层

model.add(layers.Dense(10, activation='softmax'))

这样一个简单的三层神经网络就形成了。

3、编译模型

 然后就是编译模型,对应的接口为compile,望文生义,及其好用,代码如下:

model.compile(optimizer=tf.train.AdamOptimizer(0.001),
              loss=tf.keras.losses.categorical_crossentropy,
              metrics=[tf.keras.metrics.categorical_accuracy])

注意下compile方法里面的参数,optimizer表示选择哪种优化算法,这里使用的是Adam算法,0.001是指学习率。常用的优化算法有梯度下降算法tf.train.GradientDescentOptimizerRMSProp算法tf.train.RMSPropOptimizer等,具体可以参考官方API

 loss顾名思义就是损失函数,这里传的是分类交叉熵函数categorical_crossentropy ,另外常见的有均方差mse、交叉熵损失函数binary_crossentropy等,具体可以参考官方API

metrics用于监控训练。

4、拟合模型

使用fit方法拟合模型,拟合模型之前需要给模型喂数据,这里我们通过numpy生成随机数据,然后拟合,代码如下:

import numpy as np

data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))

model.fit(data, labels, epochs=10, batch_size=32)

#######################以下是运行结果#######################
Epoch 1/10
1000/1000 [==============================] - 0s 437us/step - loss: 11.5771 - categorical_accuracy: 0.0940
Epoch 2/10
1000/1000 [==============================] - 0s 16us/step - loss: 11.5316 - categorical_accuracy: 0.1000
Epoch 3/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.5245 - categorical_accuracy: 0.0950
Epoch 4/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.5170 - categorical_accuracy: 0.1100
Epoch 5/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.5119 - categorical_accuracy: 0.1200
Epoch 6/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.5078 - categorical_accuracy: 0.1340
Epoch 7/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.5041 - categorical_accuracy: 0.1390
Epoch 8/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.5004 - categorical_accuracy: 0.1480
Epoch 9/10
1000/1000 [==============================] - 0s 31us/step - loss: 11.4962 - categorical_accuracy: 0.1420
Epoch 10/10
1000/1000 [==============================] - 0s 16us/step - loss: 11.4914 - categorical_accuracy: 0.1500

在方法中:

batch_size表示一个batch数据集的大小,由于我们的data是一个1000*32的矩阵,所以其实有32000个单数据,一次训练32个,总共训练完这32000个,也就是一个epoch。我们也可以更改epoch和batch_size的大小来调整样本训练和迭代次数。

5、评估模型

使用evaluate来评估模型的误差和准确度,这里我们用了7个不同batch_size来评估,对比发现,batch_size选为128时,误差最小(11.797072265625),准确度最高(0.09900000011920929)

print(model.evaluate(data, labels, batch_size=1,verbose=0))
print(model.evaluate(data, labels, batch_size=32,verbose=0))
print(model.evaluate(data, labels, batch_size=64,verbose=0))
print(model.evaluate(data, labels, batch_size=128,verbose=0))
print(model.evaluate(data, labels, batch_size=256,verbose=0))
print(model.evaluate(data, labels, batch_size=512,verbose=0))
print(model.evaluate(data, labels, batch_size=1024,verbose=0))

#######################以下是运行结果#######################
[11.79707234954834, 0.099]
[11.797072402954102, 0.099]
[11.797072357177735, 0.09900000011920929]
[11.797072265625, 0.09900000011920929]
[11.79707233428955, 0.09900000077486039]
[11.79707208251953, 0.09899999970197677]
[11.797072410583496, 0.0989999994635582]

6、预测

模型构建好之后,我们就可以使用predict方法来做预测了,代码和运行结果如下:

result = model.predict(data, batch_size=128)
print("样本值为:{0},预测值为:{1}".format(labels[0][0],result[0][0]))
print("样本值为:{0},预测值为:{1}".format(labels[1][1],result[1][1]))
print("样本值为:{0},预测值为:{1}".format(labels[99][3],result[99][3]))
print("样本值为:{0},预测值为:{1}".format(labels[99][9],result[99][9]))

#######################以下是运行结果#######################
样本值为:0.16150409836130775,预测值为:0.09359117597341537
样本值为:0.396365489533654,预测值为:0.09647810459136963
样本值为:0.10301416501284555,预测值为:0.09253861755132675
样本值为:0.35652257869247117,预测值为:0.10236872732639313

从运行结果来看,误差基本上没有偏离太大,但还是不小,主要因为我们本来输入的就是随机数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值