基于tensorflow2.0 使用tf.keras实现Fashion MNIST
本次使用的是2.0测试版,正式版估计会很快就上线了 tf2好像更新了蛮多东西 虽然教程不多 还是找了个试试 的确简单不少,但是还是比较喜欢现在这种写法
老样子先导入库
import tensorflow as tf
import tensorflow_datasets as tfds
import numpy as np
import matplotlib.pyplot as plt
import math
import tqdm
import tqdm.auto
tqdm.tqdm = tqdm.auto.tqdm
print(tf.__version__)
#导入库
我的版本是2.0.0-dev20190402
现在正在使用google的colab 训练,因为我本地tensorflow2.0死活装不上一直报错了 折腾了一天放弃了 何况google还有免费gpu和tpu能用 速度也不会太慢
导入了库然后接着导入数据集
dataset,metadata = tfds.load('fashion_mnist',as_supervised=True,with_info=True)
train_dataset,test_dataset = dataset['train'],dataset['test']
#导入数据集
创建个标签 方便以后看
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
#映射标签
查看训练样本个数个测试样本个数
num_train_examples = metadata.splits['train'].num_examples
num_test_examples = metadata.splits['test'].num_examples
print("训练样本个数: {}".format(num_train_examples))
print("测试样本个数:{}".format(num_test_examples))
训练样本个数: 60000 测试样本个数:10000
接下来标准化样本 直接/255
def normalize(images,labels): #定义标准化函数
images = tf.cast(images,tf.float32)
images /= 255
return images,labels train_dataset = train_dataset.map(normalize)#标准化
test_dataset = test_dataset.map(normalize) #标准化
图像数据中每个像素的值是范围内的整数[0,255],为了使模型正常工作,需要将这些值标准化为范围[0,1]
显示样本
#显示前25幅图像。训练集并在每个图像下面显示类名
plt.figure(figsize=(10,10))
i = 0
for (image, label) in test_dataset.take(25):
image = image.numpy().reshape((28,28))
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(image, cmap=plt.cm.binary)
plt.xlabel(class_names[label])
i += 1
plt.show()
建立模型
#建立模型
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28,1)), #输入层
tf.keras.layers.Dense(256,activation=tf.nn.relu),#隐藏层1
tf.keras.layers.Dense(128,activation=tf.nn.relu),#隐藏层2
tf.keras.layers.Dense(10,activation=tf.nn.softmax)#输出层
])
一个四层模型这就建立好了。。。。。 一个输入层两个隐藏层一个输出层
输入
tf.keras.layers.Flatten-这一层将图像从2d-数组转换为28。×28个像素,一个784像素的一维数组(28*28)。将这一层想象为将图像中的逐行像素拆开,并将它们排列起来。该层没有需要学习的参数,因为它只是重新格式化数据。“隐藏”
tf.keras.layers.Dense-由128个神经元组成的密集连接层。每个神经元(或节点)从前一层的所有784个节点获取输入,根据训练过程中将学习到的隐藏参数对输入进行加权,并将单个值输出到下一层。输出量
tf.keras.layers.Dense-A 10节点Softmax层,每个节点表示一组服装。与前一层一样,每个节点从其前面层的128个节点获取输入。每个节点根据学习到的参数对输入进行加权,然后在此范围内输出一个值。[0, 1],表示图像属于该类的概率。所有10个节点值之和为1。
接下来定义优化器和损失函数
#定义优化器和损失函数
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
然后再设置一下训练轮次和样本
BATCH_SIZE = 32
train_dataset = train_dataset.repeat().shuffle(num_train_examples).batch(BATCH_SIZE)
test_dataset = test_dataset.batch(BATCH_SIZE)
训练样本开冲!
#训练模型
model.fit(train_dataset, epochs=5, steps_per_epoch=math.ceil(num_train_examples/BATCH_SIZE))
然后放上结果
Epoch 1/5
1875/1875 [==============================] - 52s 28ms/step - loss: 0.8060 - accuracy: 0.7083
Epoch 2/5
1875/1875 [==============================] - 35s 18ms/step - loss: 0.5326 - accuracy: 0.8074
Epoch 3/5
1875/1875 [==============================] - 33s 18ms/step - loss: 0.4673 - accuracy: 0.8315
Epoch 4/5
1875/1875 [==============================] - 34s 18ms/step - loss: 0.4341 - accuracy: 0.8439
Epoch 5/5
1875/1875 [==============================] - 34s 18ms/step - loss: 0.4145 - accuracy: 0.8507
<tensorflow.python.keras.callbacks.History at 0x7f8b2bdfca90>
0.85的准确率 还行吧 google的GPU还是蛮快的吧
最后看一下模型在测试集上面的表现如何
test_loss, test_accuracy = model.evaluate(test_dataset, steps=math.ceil(num_test_examples/32))
print('Accuracy on test dataset:', test_accuracy)
313/313 [==============================] - 6s 18ms/step - loss: 0.4331 - accuracy: 0.8435
Accuracy on test dataset: 0.8435
还行吧 相差无几,后面还有一些跟之前差不多的用模型预测和显示结果图片就不放上来了 放在下面的完整代码
下一张尝试一下使用CNN卷积神经网络,反正使用tf.keras建立起来也是蛮简单的
最后放上代码
import tensorflow as tf
import tensorflow_datasets as tfds
import numpy as np
import matplotlib.pyplot as plt
import math
import tqdm
import tqdm.auto
tqdm.tqdm = tqdm.auto.tqdm
print(tf.__version__)
#导入库 dataset,metadata = tfds.load('fashion_mnist',as_supervised=True,with_info=True)
train_dataset,test_dataset = dataset['train'],dataset['test']
#导入数据集 class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
#映射标签 num_train_examples = metadata.splits['train'].num_examples
num_test_examples = metadata.splits['test'].num_examples
print("训练样本个数: {}".format(num_train_examples))
print("测试样本个数:{}".format(num_test_examples)) def normalize(images,labels): #定义标准化函数
images = tf.cast(images,tf.float32)
images /= 255
return images,labels train_dataset = train_dataset.map(normalize)#标准化
test_dataset = test_dataset.map(normalize) #标准化 #绘制一个图像
for image, label in test_dataset.take(1):
break
image = image.numpy().reshape((28,28)) plt.figure()
plt.imshow(image, cmap=plt.cm.binary)
plt.colorbar()
plt.grid(False)
plt.show() #显示前25幅图像。训练集并在每个图像下面显示类名
plt.figure(figsize=(10,10))
i = 0
for (image, label) in test_dataset.take(25):
image = image.numpy().reshape((28,28))
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(image, cmap=plt.cm.binary)
plt.xlabel(class_names[label])
i += 1
plt.show() #建立模型
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28,1)), #输入层
tf.keras.layers.Dense(256,activation=tf.nn.relu),#隐藏层1
tf.keras.layers.Dense(128,activation=tf.nn.relu),#隐藏层2
tf.keras.layers.Dense(10,activation=tf.nn.softmax)#输出层
]) #定义优化器和损失函数
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']) #设置训练参数
BATCH_SIZE = 32
train_dataset = train_dataset.repeat().shuffle(num_train_examples).batch(BATCH_SIZE)
test_dataset = test_dataset.batch(BATCH_SIZE) #训练模型
model.fit(train_dataset, epochs=5, steps_per_epoch=math.ceil(num_train_examples/BATCH_SIZE)) test_loss, test_accuracy = model.evaluate(test_dataset, steps=math.ceil(num_test_examples/32))
print('Accuracy on test dataset:', test_accuracy) for test_images, test_labels in test_dataset.take(1):
test_images = test_images.numpy()
test_labels = test_labels.numpy()
predictions = model.predict(test_images) predictions.shape predictions[0] np.argmax(predictions[0]) test_labels[0] def plot_image(i, predictions_array, true_labels, images):
predictions_array, true_label, img = predictions_array[i], true_labels[i], images[i]
plt.grid(False)
plt.xticks([])
plt.yticks([]) plt.imshow(img[...,0], cmap=plt.cm.binary) predicted_label = np.argmax(predictions_array)
if predicted_label == true_label:
color = 'blue'
else:
color = 'red' plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],
100*np.max(predictions_array),
class_names[true_label]),
color=color) def plot_value_array(i, predictions_array, true_label):
predictions_array, true_label = predictions_array[i], true_label[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
thisplot = plt.bar(range(10), predictions_array, color="#777777")
plt.ylim([0, 1])
predicted_label = np.argmax(predictions_array) thisplot[predicted_label].set_color('red')
thisplot[true_label].set_color('blue') i = 0
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions, test_labels) i = 12
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions, test_labels) num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):
plt.subplot(num_rows, 2*num_cols, 2*i+1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(num_rows, 2*num_cols, 2*i+2)
plot_value_array(i, predictions, test_labels) img = test_images[0] print(img.shape) img = np.array([img]) print(img.shape) predictions_single = model.predict(img) print(predictions_single) plot_value_array(0, predictions_single, test_labels)
_ = plt.xticks(range(10), class_names, rotation=45) np.argmax(predictions_single[0])
完整代码
基于tensorflow2.0 使用tf.keras实现Fashion MNIST的更多相关文章
- 一文上手Tensorflow2.0之tf.keras(三)
系列文章目录: Tensorflow2.0 介绍 Tensorflow 常见基本概念 从1.x 到2.0 的变化 Tensorflow2.0 的架构 Tensorflow2.0 的安装(CPU和GPU ...
- colab上基于tensorflow2.0的BERT中文多分类
bert模型在tensorflow1.x版本时,也是先发布的命令行版本,随后又发布了bert-tensorflow包,本质上就是把相关bert实现封装起来了. tensorflow2.0刚刚在2019 ...
- TensorFlow2.0教程-使用keras训练模型
1.一般的模型构造.训练.测试流程 # 模型构造 inputs = keras.Input(shape=(784,), name='mnist_input') h1 = layers.Dense(64 ...
- 基于tensorflow2.0和cifar100的VGG13网络训练
VGG是2014年ILSVRC图像分类竞赛的第二名,相比当年的冠军GoogleNet在可扩展性方面更胜一筹,此外,它也是从图像中提取特征的CNN首选算法,VGG的各种网络模型结构如下: 今天代码的原型 ...
- Tensorflow2(一)深度学习基础和tf.keras
代码和其他资料在 github 一.tf.keras概述 首先利用tf.keras实现一个简单的线性回归,如 \(f(x) = ax + b\),其中 \(x\) 代表学历,\(f(x)\) 代表收入 ...
- 推荐模型DeepCrossing: 原理介绍与TensorFlow2.0实现
DeepCrossing是在AutoRec之后,微软完整的将深度学习应用在推荐系统的模型.其应用场景是搜索推荐广告中,解决了特征工程,稀疏向量稠密化,多层神经网路的优化拟合等问题.所使用的特征在论文中 ...
- TensorFlow2.0(9):TensorBoard可视化
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 一文上手Tensorflow2.0(四)
系列文章目录: Tensorflow2.0 介绍 Tensorflow 常见基本概念 从1.x 到2.0 的变化 Tensorflow2.0 的架构 Tensorflow2.0 的安装(CPU和GPU ...
- python 3.7 安装 sklearn keras(tf.keras)
# 1 sklearn 一般方法 网上有很多教程,不再赘述. 注意顺序是 numpy+mkl ,然后 scipy的环境,scipy,然后 sklearn # 2 anoconda ana ...
随机推荐
- 【爬坑】Python 3.6 在 Socket 编程时出现类型错误 TypeError: a bytes-like object is required, not 'str'
1. 问题描述 Python 3.6 在 Socket 编程时出现错误如下 Traceback (most recent call last): File "F:/share/IdeaPro ...
- MySQL基础之 外键参照讲解
外键: 定义:如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表. 作用:外键是用来实现参照完整性的,不同的外键约束方式将可以是两张表紧密的结合起来.比如修改或者删除 ...
- yum 私有仓库
参考地址:https://blog.oldboyedu.com/autodeploy-yum YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具 ...
- BeanDefinition及其实现类
[转自 http://blog.csdn.net/u011179993 ] 目录(?)[+] 一. BeanDefinition及其实现类 BeanDefinition接口 这个接口描述bea ...
- [python]通过uiautomator实现返回当前程序包名
# -*- coding: utf-8 -*- from uiautomator import device as d def getCurrentPackageName(): info = d.in ...
- 【adb命令】在cmd窗口中使用adb install命令安装 中文名字apk报错的解决办法
1.在cmd窗口中使用adb install命令安装中文名字apk报错,安装英文名字apk就正常,详细报错如下图: 2.查看adb版本号:adb version 3.怀疑是adb版本的原因,尝试换个最 ...
- linux禁止非法用户试探登录
当我们的linux主机一旦暴露在互联网上,就会遭受到来自网络上的一些非法用户的骚扰.如弱口令扫描,试探性登录:这些行为对linux主机构成一定的威胁.那怎样防范此类的攻击了,这里写了一个脚本,功能就是 ...
- yaml格式
yaml中允许表示三种格式,分别为常量值.对象和数组 例如: 其中#作为注释,yaml中只有行注释 基本格式要求: 1.大小写敏感:2.使用缩进代表层级关系: 3.缩进只能使用空格,不能使用tab键, ...
- c# winform 自动升级
winform自动升级程序示例源码下载 客户端思路: 1.新建一个配置文件Update.ini,用来存放软件的客户端版本: [update] version=2011-09-09 15:26 2.新 ...
- Spring之 Aspect Oriented Programming with Spring
1. Concepts Aspect-Oriented Programming (AOP) complements OOP by providing another way of thinking a ...