吴恩达团队 Tensorflow课程学习笔记 2

Fashion MNIST简介

• 70k images
• 10 categories
• Images are 28×28
• Can train a neural net
• 60k作为训练数据,10k作为测试数据
• Fashion MNIST在Tensorflow里作为一个有API的数据集存在

加载数据集

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

在这里插入图片描述

数据样本展示

import matplotlib.pyplot as plt
plt.imshow(train_images[0])
print(train_labels[0])
print(train_images[0])

输出的标签是9
图片的输出是以矩阵形式(矩阵太大了就不展示了)
图片展示
图片是灰度的???
在这里插入图片描述

模型编译、训练、测试

model.compile(optimizer = 'Adam',
       loss = 'sparse_categorical_crossentropy',
       metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=5)

教程里用的以下代码,在Tensorflow2.0里用不了,会报错AttributeError: module ‘tensorflow_core._api.v2.train’ has no attribute ‘AdamOptimizer’

optimizer = tf.train.AdamOptimizer()

然后看了一些网帖,改用以下代码

optimizer = 'Adam'

改完之后,代码能运行了,但是用于训练的图片只有1875张(正常情况下应该是6000张),可以看到损失很高,精确率很低
后面增加epoch(教程代码用的5个epoch),也没有改善
在这里插入图片描述
测试

model.evaluate(test_images, test_labels)

在这里插入图片描述

自动结束训练

训练循环支持回调,每次迭代可以回调一个代码函数,根据指标选择是否取消训练
利用python编写一个单独的类

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self,epoch,logs={}):
    if(logs.get('loss')<0.4):
       print("\nLoss is low so cancelling training!")
       self.model.stop_training = True

总体的代码

import tensorflow as tf
from tensorflow import keras

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self,epoch,logs={}):
    if(logs.get('loss')<0.4):
       print("\nLoss is low so cancelling training!")
       self.model.stop_training = True

callbacks = myCallback() #实例化创建的类
fashion_mnist = keras.datasets.fashion_mnist #在Keras数据库加载
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
#声明一个类型为MNIST的对象,然后调用load_data方法
#会返回四个列表:训练数据,训练标签;测试数据,测试标签

train_images  = train_images / 255.0
test_images = test_images / 255.0
#神经网络在标准化数据工作更好,所以进行标准化

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28,28)),
    keras.layers.Dense(128,activation=tf.nn.relu),
    keras.layers.Dense(10,activation=tf.nn.softmax)
])
#一共三层,最后一层有10个神经元(对应10个类别),第一层的输入是28×28(图片大小是28×28),隐藏层有128个神经元

model.compile(optimizer = 'adam',
              loss = 'sparse_categorical_crossentropy',
              metrics=['accuracy'])
#编译模型

model.fit(train_images, train_labels, epochs=5,callbacks=[callbacks])
#使用了回调参数,并传递它的类实例

model.evaluate(test_images, test_labels)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值