tensorflow2.0框架下用keras进行图片处理分类及完整模型的保存/调用

在2019年tensorflow迎来了更新,从1.0时代到2.0,其中有一个很重要的点就是keras 现在已经集成到了tensorflow框架下,因此在升级到2.0版本去运行tensorflow1.0+的代码时会遇到几个bug,略为复杂,此处不做解释。

2.0版本直接import keras 会导致error产生,需要在前面加上from tensorflow

from tensorflow import keras

以下是参考tensorflow文档个人学习的文档,由于文档内有些地方不是很明确,个人梳理了下希望能帮到一起学习的同学。

首先先进行相关的包导入

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from tensorflow import keras

import numpy as np
import matplotlib.pyplot as plt 

导入数据集

keras自身封装了一些数据集,我们导入其中的fashion_mnist数据集(包含了十种服饰的6000个28*28像素的图片,标签已经标记好)

fashion_mnist = keras.datasets.fashion_mnist

对数据进行预处理

接下来就是从数据集中获取训练/测试的图片和标签,同时声明数据集中的分类;
由于60000个数据太多,我们仅取用前1000个训练集和测试集;
将图片的数值归一化,是为了更便捷地处理图片

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

# 此处声明类
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']


# 取前1000个数据
train_labels = train_labels[:1000]
test_labels = test_labels[:1000]

# 归一化数据
train_images = train_images[:1000].reshape(-1, 28, 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28, 28) / 255.0

创建序列模型

此处我们就开始搭建训练的模型,定义了一个create_model方法,其中包括模型部分和编译器部分
模型部分:
1、flatten层能展平数据;
2、Dense部分即为全连接层,代表了输入和输出;
3、activation='relu'即为激活函数,默认不适用。未使用的情况下是线性激活,输入与输出相同。
编译部分:
1、optimizer是进行优化器的选择
2、loss即是使用对应的损失函数
3、metrics是评价函数

def create_model():
    model = keras.models.Sequential([
        keras.layers.Flatten(input_shape=(28, 28)),
        keras.layers.Dense(128, activation='relu'),
        keras.layers.Dense(10)
    ])

    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                  metrics=['accuracy'])
                  
    return model

开始训练模型

定义一个model对象,使用fit输入训练集和label进行训练。
epochs是指对训练集运转的轮数,10表示运转整个训练集10次。

model = create_model()
model.fit(train_images, train_labels, epochs=10)

运行结果:

1000/1000 [==============================] - 0s 103us/sample - loss: 1.6780 - accuracy: 0.8010

使用测试集查看运行的准确率

对比在训练集中的准确率,一般测试集都会较低些

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

print('\nTest accuracy:', test_acc)

结果

1000/1 - 0s - loss: 1.7181 - accuracy: 0.7600

保存训练好的模型

我们先查看模型的网络结构:

print(model.summary())

运行结果:
用作训练的模型信息
接下俩对模型进行保存(小编命名为my_new_model),我们保存的格式为H5文件,可视为二进制的blob。该文件内保存了完整的模型,包括其:
权重
模型配置(结构)
优化器配置
对比别的保存方式最为简便及完全。

model.save('my_new_model.h5')

调用模型

新建一个python文档,导入keras

from tensorflow import keras

加载模型

# 重新创建完全相同的模型,包括其权重和优化程序
new_model = keras.models.load_model('my_new_model.h5')

到此模型已经导入结束,我们导入测试集图片进行测试,并打印其网络结构及准确率

# 导入测试集
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
# 继续选取前1000个数据作为测试集
test_labels = test_labels[:1000]
test_images = test_images[:1000].reshape(-1, 28, 28) / 255.0

# 打印出网络结构及进行测试
new_model.summary()
loss, acc = new_model.evaluate(test_images,  test_labels, verbose=2)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

运行结果:
在这里插入图片描述

到此我们已经成功地建立了模型,并对其进行训练和验证、保存,以及对其进行了回调。
初入keras的坑,如有不对请路过的大佬多多指正,谢谢。
喜欢可关注,后续会继续发布更多的文章,感谢支持!
完整内容请参考tensorflow官方教程:
tensorflow教程

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow 2.0是一个开源的机器学习框架,可以使用Python进行编程。以下是使用PythonTensorFlow 2.0框架的步骤: 1. 安装TensorFlow 2.0 可以使用pip命令来安装TensorFlow 2.0: ``` pip install tensorflow==2.0.0 ``` 2. 导入TensorFlow 2.0库 在Python代码中,需要导入TensorFlow 2.0库: ``` import tensorflow as tf ``` 3. 创建模型 使用TensorFlow 2.0,可以使用Keras API创建模型。以下是一个简单的例子: ``` from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense model = Sequential() model.add(Dense(10, activation='relu', input_shape=(784,))) model.add(Dense(1, activation='sigmoid')) ``` 上面的代码创建了一个简单的神经网络模型,包含一个输入层、一个隐藏层和一个输出层。 4. 编译模型 在创建模型后,需要编译模型。可以指定优化器、损失函数和评估指标: ``` model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) ``` 5. 训练模型 使用fit方法来训练模型。需要指定训练数据和标签,以及训练的批次大小和训练的轮数: ``` model.fit(train_data, train_labels, batch_size=32, epochs=10) ``` 6. 评估模型 使用evaluate方法来评估模型的性能: ``` loss, accuracy = model.evaluate(test_data, test_labels) print('Test accuracy:', accuracy) ``` 7. 使用模型进行预测 使用predict方法来对新的数据进行预测: ``` predictions = model.predict(new_data) ``` 上面的代码返回模型对新数据的预测结果。 这就是使用PythonTensorFlow 2.0框架的基本步骤。当然,还有很多其他的功能和选项可以使用,例如使用预训练模型进行数据增强等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值