Tensorflow2.0: tf.Keras之简单卷积神经网络模型构建

先介绍训练所使用的数据集iris

鸢尾花数据集(iris)是常用的分类实验数据集,有Fisher与1936年收集整理。iris包含150条数据,3个类别(Setosa,Versicolour,Virginica),每类50条数据,每条数据包含4个数值属性(花萼长度,花萼宽度,花瓣长度,花瓣宽度)。

从sklearn数据库可导入iris数据集:

from sklearn.datasets import load_iris
data = load_iris()

 data是Bunch类型的参数,Bunch类继承于dict(字典),也是键值对形式的数据保存模块。但与字典不同的是可以直接通过Bunch.属性名  的形式访问元素。

from sklearn.datasets.base import Bunch
a = Bunch(age = 'aa',set = "sdf")
a.age
Out[9]: 'aa'

必须从sklearn.datasets.base导入Bunch

 data包含:data、target、target_names、DESCR、feature_names五个属性,这里只用到前两个:data、target。

data.data的shape(None,4)

data.target是直接的类标签[0,0,0,0,0,0,1,1,1,1,2,2,2,2,2....]。我们要将其转换为shape(None,3),这就是所谓的独热编码(one-hot)处理。

iris_target = np.float32(tf.keras.utils.to_categorical(iris_target,num_classes=3))

一行3列的形式表示三个类别。

tensorflow采用批量数据读取:tf.data.Dataset.from_tensor_slices函数 并通过batch打包,我们将数据和标签打包成元组一起放入训练数据中

train_data = tf.data.Dataset.from_tensor_slices((iris_data,iris_target)).batch(128)

此时,我们准备好了数据集train_data 。它是一个BatchDataset类型数据,shapes:((None,4),(None,3)),types:(tf.float32,tf.float32)

import tensorflow as tf
import numpy as np
from sklearn.datasets import load_iris
import math
data = load_iris()
iris_target = data.target
iris_data = np.float32(data.data)
iris_target = np.float32(tf.keras.utils.to_categorical(iris_target,num_classes=3))
train_data = tf.data.Dataset.from_tensor_slices((iris_data,iris_target)).batch(128)

1、model.add()方式

model = tf.keras.models.Sequential()
# Add layers
model.add(tf.keras.layers.Dense(32, activation="relu"))
model.add(tf.keras.layers.Dense(64, activation="relu"))
model.add(tf.keras.layers.Dense(3,activation="softmax"))
opt = tf.optimizers.Adam(1e-3)


model.compile(optimizer = opt,loss=tf.losses.categorical_crossentropy,metrics = ['accuracy'])
model.fit(train_data,epochs = 500)
score = model.evaluate(iris_data, iris_target)
print("last score:",score)

2、Sequential() 直接添加

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(32,activation="relu"),
    tf.keras.layers.Dense(64, activation="relu"),
    tf.keras.layers.Dense(3,activation="softmax")
])
opt = tf.optimizers.Adam(1e-3)
model.compile(optimizer = opt,loss=tf.losses.categorical_crossentropy,metrics = ['accuracy'])
model.fit(train_data,epochs = 500)
score = model.evaluate(iris_data, iris_target)
print("last score:",score)

 3、model = tf.keras.Model(inputs=input_xs, outputs=logits)

input_xs  = tf.keras.Input(shape=(4), name='input_xs')
out = tf.keras.layers.Dense(32, activation='relu', name='dense_1')(input_xs)
out = tf.keras.layers.Dense(64, activation='relu', name='dense_2')(out)
logits = tf.keras.layers.Dense(3, activation="softmax",name='predictions')(out)
model = tf.keras.Model(inputs=input_xs, outputs=logits)
opt = tf.optimizers.Adam(1e-3)
model.compile(optimizer=tf.optimizers.Adam(1e-3), loss=tf.losses.categorical_crossentropy,
metrics = ['accuracy'])

model.fit(train_data, epochs=500)
score = model.evaluate(iris_data, iris_target)
print("last score:",score)

上述三种方法的结果是一致的:

Epoch 1/500

1/Unknown - 1s 1s/step - loss: 1.4003 - accuracy: 0.3906
2/Unknown - 1s 523ms/step - loss: 2.0731 - accuracy: 0.3333

2/2 [==============================] - 1s 535ms/step - loss: 2.0731 - accuracy: 0.3333
Epoch 2/500

1/2 [==============>...............] - ETA: 0s - loss: 1.2291 - accuracy: 0.3906
2/2 [==============================] - 0s 8ms/step - loss: 1.3029 - accuracy: 0.3333
Epoch 3/500

。。。。。。。

Epoch 500/500

1/2 [==============>...............] - ETA: 0s - loss: 0.1002 - accuracy: 0.9609
2/2 [==============================] - 0s 7ms/step - loss: 0.0963 - accuracy: 0.9667

150/1 [===========================] - 0s 399us/sample - loss: 0.0685 - accuracy: 0.9667
last score: [0.09203936378161112, 0.96666664]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
tf2.0深度学习实战(三)是一本介绍如何搭建lenet-5卷神经网络的书籍。Lenet-5是一个经典的深度学习模型,通常用于手写数字识别任务。该书籍详细介绍了如何使用TensorFlow 2.0框架来实现Lenet-5模型,从搭建模型、编写代码到模型训练和验证,全方位地指导读者进行实战。 首先,书籍介绍了Lenet-5模型的结构和原理,包括卷层、池化层和全连接层等基本组件的构成,以及激活函数、损失函数和优化器的选择。然后,通过TensorFlow 2.0的高层API,书籍演示了如何使用keras库来构建Lenet-5模型的代码,包括定义模型结构、编译模型、设置优化器和损失函数等步骤,使读者能够快速上手。 接着,书籍详细讲解了如何使用MNIST手写数字数据集来训练和验证Lenet-5模型,包括数据预处理、模型训练和测试评估等内容。通过实际的代码演示和实验结果展示,读者可以直观地了解模型的性能和训练过程,提升对深度学习模型的理解和实践能力。 最后,书籍还介绍了如何对Lenet-5模型进行优化和改进,包括调整模型结构、改变参数配置和使用其他技巧来提升模型的性能。通过这些内容,读者可以深入理解Lenet-5模型的原理和实现细节,为之后在实际项目中应用深度学习模型打下良好的基础。整体而言,tf2.0深度学习实战(三)通过详细的讲解和实战操作,帮助读者掌握了搭建Lenet-5卷神经网络的技能和经验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James.TCG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值