Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TensorFlow 2.0 Tutorial: 4 - 几个常用技术

TensorFlow 2.0 Tutorial: 4 - 几个常用技术

作者头像
杨熹
发布于 2019-04-22 02:48:19
发布于 2019-04-22 02:48:19
57300
代码可运行
举报
文章被收录于专栏:杨熹的专栏杨熹的专栏
运行总次数:0
代码可运行

这里我们将学习一些基础操作:

  1. 特征标准化
  2. 画学习曲线
  3. callbacks

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%matplotlib inline
%load_ext tensorboard.notebook

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import sklearn
import sys
import tensorflow as tf
from tensorflow import keras  # tf.keras
import time

assert sys.version_info >= (3, 5) # Python ≥3.5 required
assert tf.__version__ >= "2.0"    # TensorFlow ≥2.0 required

fashion_mnist = keras.datasets.fashion_mnist
(X_train_full, y_train_full), (X_test, y_test) = (
    fashion_mnist.load_data())
X_valid, X_train = X_train_full[:5000], X_train_full[5000:]
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]

plt.imshow(X_train[0], cmap="binary")
plt.show()

class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",
               "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]

1. 建立神经网络

下面这个过程是一个最基础的模型建立到评估到预测的流程, 几乎都是遵循这样的一个过程,

  • 先是建立一个基础的网络模型, 输入层,先将 28x28 图片转换成 1x784 , 隐藏层,定义神经元个数和激活函数, 输出层,定义类别的个数,并用 softmax 得到概率。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28, 28]),
    keras.layers.Dense(300, activation="relu"),
    keras.layers.Dense(100, activation="relu"),
    keras.layers.Dense(10, activation="softmax")
])

然后是查看模型,

  • 编译模型,此时定义 loss,optimizer,metrics,
  • 训练模型可以用最简单的 fit,
  • 评估模型用 model.evaluate
  • 最后是预测新数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.summary()
model.compile(loss="sparse_categorical_crossentropy",
              optimizer="sgd", 
              metrics=["accuracy"])
history = model.fit(X_train, y_train, epochs=10,
                    validation_data=(X_valid, y_valid))
model.evaluate(X_test, y_test)

n_new = 10
X_new = X_test[:n_new]
y_proba = model.predict(X_new)

2. 常用技术

1. 我们可以对特征进行标准化的预处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
X_valid_scaled = scaler.transform(X_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
X_test_scaled = scaler.transform(X_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)

然后在模型训练和评估时使用标准化的数据,可以对比两次效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
history = model.fit(X_train_scaled, y_train, epochs=20,
                    validation_data=(X_valid_scaled, y_valid))
model.evaluate(X_test_scaled, y_test)

2. 我们还可以用 pd.DataFrame(history.history).plot 画出学习曲线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def plot_learning_curves(history):
    pd.DataFrame(history.history).plot(figsize=(8, 5))
    plt.grid(True)
    plt.gca().set_ylim(0, 1)
    plt.show()
plot_learning_curves(history)

3. 想要知道预测结果的类别 ID,可以用下面两种方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred = y_proba.argmax(axis=1)
y_pred = model.predict_classes(X_new)

要查看 top k 类别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
k = 3
top_k = np.argsort(-y_proba, axis=1)[:, :k]
top_k

4. fit() 里面可以接收 callbacks:

callbacks 回调函数是一个函数的合集,可以调用 TensorBoard,EarlyStopping, ModelCheckpoint 等函数。

model 和 compile 没有变化,只需要将 callbacks 传递给 fit:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28, 28]),
    keras.layers.Dense(300, activation="relu"),
    keras.layers.Dense(100, activation="relu"),
    keras.layers.Dense(10, activation="softmax")
])
model.compile(loss="sparse_categorical_crossentropy",
              optimizer="sgd", metrics=["accuracy"])

logdir = os.path.join(root_logdir, "run_{}".format(time.time()))

callbacks = [
    keras.callbacks.TensorBoard(logdir),
    keras.callbacks.EarlyStopping(patience=5),
    keras.callbacks.ModelCheckpoint("my_mnist_model.h5", save_best_only=True),
]

history = model.fit(X_train_scaled, y_train, epochs=50,
                    validation_data=(X_valid_scaled, y_valid),
                    callbacks=callbacks)

学习资料: https://github.com/ageron/tf2_course/blob/master/01_neural_nets_with_keras.ipynb


大家好! 我是 不会停的蜗牛 Alice, 喜欢人工智能,每天写点机器学习干货, 欢迎关注我!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序电商实战-首页(上)
上一篇:微信小程序电商实战-入门篇 嗨,大家好!经过近两周的精心准备终于开始微信小程序电商实战之路喽。那么最终会做成什么样呢?好了,不啰嗦了 我们先看首页长什么样吧! 首页效果图.gif 为了能够更好的表达出来,首页准备分成两次写完。 第一部分先实现如下的功能 Hi.World-home_top.gif 划分模块 大家都知道电商平台一般分为首页、商品分类、购物车和个人中心4个核心模块,那么我们先在app.json的page里添加如下代码 一、设置头部 背景颜色为白色,名称是Hi.World 二、首页
企鹅号小编
2018/01/11
2.9K0
微信小程序电商实战-首页(上)
微信小程序入门教程之三:脚本编程
今天,接着往下讲,教大家为小程序加入 JavaScript 脚本,做出动态效果,以及如何跟用户互动。学会了脚本,就能做出复杂的页面了。
ruanyf
2020/11/03
1.8K0
微信小程序入门教程之三:脚本编程
微信小程序入门教程之一:初次上手
微信是中国使用量最大的手机 App 之一,日活跃用户超过3亿,月活跃用户超过11亿(2019年底统计),市场极大。
ruanyf
2020/10/29
7270
微信小程序入门教程之一:初次上手
创建属于自己的第一个小程序【小程序专题7】
第一步,新建一个小程序的项目目录。名字可以随便起,这里称为wechat-miniprogram-demo。
徐建国
2021/12/08
8420
创建属于自己的第一个小程序【小程序专题7】
微信小程序入门教程之二:页面样式
这个系列的上一篇教程,教大家写了一个最简单的 Hello world 微信小程序。
ruanyf
2020/10/29
1.3K0
小程序实践(三):九宫格实现及item跳转
效果图: 实现效果图红色线包含部分的九宫格效果,并附带item点击时间。  --------------------------------------------------------------
听着music睡
2018/07/03
2.1K1
微信小程序开发入门指南
大家好,今天将为大家介绍一下微信小程序的开发。微信小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。本文将从浅入深,以轻松易懂的方式为大家介绍微信小程序的开发。
陆业聪
2024/07/23
7510
微信小程序开发入门指南
【愚公系列】《微信小程序与云开发从入门到实践》023-与微信开放能力相关的组件
在微信生态系统中,小程序作为一种轻量级的应用形式,凭借其便捷性和丰富的功能,受到越来越多用户和开发者的青睐。随着微信开放能力的不断增强,开发者能够利用更多的组件来实现与微信生态的深度融合,为用户提供更为丰富和高效的服务。
愚公搬代码
2025/01/18
1270
微信小程序——轮播图、组件传值、下拉刷新、导航 实战开发
滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。 属性表如下
wsuo
2020/09/22
1.6K0
[猫头虎分享21天微信小程序基础入门教程]第18天:小程序的性能监控与优化
大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了解如何进行性能监控与优化。这些内容对于提升小程序的运行效率和用户体验至关重要。🌟
猫头虎
2024/05/28
2650
小程序开发实战项目:构建简易待办事项列表
随着移动互联网的飞速发展,小程序以其便捷性、即用即走的特点,成为了连接用户与服务的重要桥梁。无论是电商平台的购物助手,还是餐饮行业的点餐系统,小程序都在各个领域发挥着巨大的作用。
小白的大数据之旅
2024/12/28
1730
微信小程序自定义tab,多层tab嵌套实现
小程序最近是越来越火了…… 做小程序有一段时间了,总结一下项目中遇到的问题及解决办法吧。
solocoder
2022/04/06
8240
微信小程序自定义tab,多层tab嵌套实现
小程序 | 15-页面跳转
实现界面跳转有两种方式:通过 navigator 组件 和 通过 wx 的 api 跳转
CnPeng
2021/05/17
8890
小程序 | 15-页面跳转
微信小程序个人心得「建议收藏」
官方给出了app.json五个配置项列表.(pages(Array), window(Object), tabBar(Object), networkTimeout(Object), debug(Boolean)),接着我们就详细的分下一下这几个配置项.
全栈程序员站长
2022/11/04
2K0
微信小程序个人心得「建议收藏」
小程序框架与生命周期
框架的核心是一个响应的数据绑定系统,可以让数据与视图非常简单地保持同步。当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新。
用户10196776
2023/10/17
3180
小程序框架与生命周期
微信小程序开发之(表单组件的使用)代码篇
内容包括添加视频播放、轮转图片、多选框、单选框、实时获取输入值、按钮提交输入控件的数据
全栈程序员站长
2022/09/13
9920
微信小程序开发之(表单组件的使用)代码篇
我的校园服务小程序_有创意校园的微信小程序
1.帖子在添加时会将新的帖子放在最后,再渲染时也会被渲染在后面,这样是不可以的,每一次进入界面都是第一个用户上传的帖子。
全栈程序员站长
2022/11/08
1.4K0
微信小程序开发入门教程
微信小程序开发文档链接为:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html,如下图:
全栈程序员站长
2022/09/06
2.1K0
微信小程序开发入门教程
5分钟入门 - 微信小程序开发
如果你还没有微信公众平台的账号,请先进入 微信公众平台 首页,点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信,我们选择 “小程序” 即可。
用户6808043
2022/02/25
8660
微信小程序:WXML模板语法
把data中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可。
岳泽以
2023/03/17
2.2K0
微信小程序:WXML模板语法
推荐阅读
相关推荐
微信小程序电商实战-首页(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验