every blog every motto:

0. 前言

深度可分离卷积神经网络实战

1. 代码部分

1. 导入模块

import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import kerasos.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:0'
print(tf.__version__)
print(sys.version_info)
for module in mpl,np,pd,sklearn,tf,keras:print(module.__name__,module.__version__)

2. 读取数据

fashion_mnist = keras.datasets.fashion_mnist
# print(fashion_mnist)
(x_train_all,y_train_all),(x_test,y_test) = fashion_mnist.load_data()
x_valid,x_train = x_train_all[:5000],x_train_all[5000:]
y_valid,y_train = y_train_all[:5000],y_train_all[5000:]
# 打印格式
print(x_valid.shape,y_valid.shape)
print(x_train.shape,y_train.shape)
print(x_test.shape,y_test.shape)

3. 数据归一化

# 数据归一化
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
# x_train:[None,28,28] -> [None,784]
x_train_scaled = scaler.fit_transform(x_train.astype(np.float32).reshape(-1,1)).reshape(-1,28,28,1)
x_valid_scaled = scaler.transform(x_valid.astype(np.float32).reshape(-1,1)).reshape(-1,28,28,1)
x_test_scaled = scaler.transform(x_test.astype(np.float32).reshape(-1,1)).reshape(-1,28,28,1)

4. 构建模型

# tf.keras.models.Sequential()
# 构建模型
model = keras.models.Sequential()# 卷积神经网络
# 输入
model.add(keras.layers.Conv2D(filters=32,kernel_size=3,padding="same",activation='selu',input_shape=(28,28,1)))model.add(keras.layers.SeparableConv2D(filters=32,kernel_size=3,padding='same',activation='selu'))
model.add(keras.layers.MaxPool2D(pool_size=2))model.add(keras.layers.SeparableConv2D(filters=64,kernel_size=3,padding="same",activation='selu'))
model.add(keras.layers.SeparableConv2D(filters=64,kernel_size=3,padding='same',activation='selu'))
model.add(keras.layers.MaxPool2D(pool_size=2))model.add(keras.layers.SeparableConv2D(filters=128,kernel_size=3,padding="same",activation='selu'))
model.add(keras.layers.SeparableConv2D(filters=128,kernel_size=3,padding='same',activation='selu'))
model.add(keras.layers.MaxPool2D(pool_size=2))# 展平
model.add(keras.layers.Flatten())# 全连接层
model.add(keras.layers.Dense(128,activation='relu'))# 输出层
model.add(keras.layers.Dense(10,activation="softmax"))#
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
model.summary()

5. 开始训练

# 回调函数 Tensorboard(文件夹)\earylystopping\ModelCheckpoint(文件名)
logdir = os.path.join("separable_cnn-selu-callbacks")
print(logdir)
if not os.path.exists(logdir):os.mkdir(logdir)
# 文件名
output_model_file = os.path.join(logdir,"fashion_mnist_model.h5")callbacks = [keras.callbacks.TensorBoard(logdir),keras.callbacks.ModelCheckpoint(output_model_file,save_best_only=True),keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3),
]
# 开始训练
history = model.fit(x_train_scaled,y_train,epochs=10,validation_data=(x_valid_scaled,y_valid),callbacks=callbacks)

6. 学习曲线

# 画图
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)# 损失函数,刚开始下降慢的原因
# 1. 参数众多,训练不充分
# 2. 梯度消失 -》 链式法则中
# 解决: selu缓解梯度消失

7. 测试集上

model.evaluate(x_test_scaled,y_test)

从零基础入门Tensorflow2.0 ----六、28 深度可分离卷积神经网络相关推荐

  1. 视频编码零基础入门(0):零基础,史上最通俗视频编码技术入门

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<视频编码零基础入门>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注明原文来源信息,尊重原作 ...

  2. Datawhale零基础入门NLP day5/Task5基于深度学习的文本分类2

    基于深度学习的文本分类 本章将继续学习基于深度学习的文本分类. 学习目标 学习Word2Vec的使用和基础原理 学习使用TextCNN.TextRNN进行文本表示 学习使用HAN网络结构完成文本分类 ...

  3. Datawhale零基础入门NLP赛事 - Task5 基于深度学习的文本分类2

    在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习基于深度学习的文本分类. 学习目标 学 ...

  4. Python零基础入门习题(六)红楼梦人物出场次数统计

    前言 Python语言简单易用,可读性强.在了解基础语法后,你就可以来尝试解决以下的题目.放心,本系列的文章都对新手非常友好. 一.生日悖论 生日悖论是指在不少于 23 个人中至少有两人生日相同的概率 ...

  5. 零基础入门学习Python(28)文件系统

    模块 模块是一个包含所有你定义的函数和变量的文件,其后缀是".py", 模块可以被别的程序所引入,以使用该模块中的函数等功能 1.OS模块(Operating System操作系统 ...

  6. Apache Flink 零基础入门(十六)Flink DataStream transformation

    Operators transform one or more DataStreams into a new DataStream. Operators操作转换一个或多个DataStream到一个新的 ...

  7. SQL零基础入门学习(七)

    SQL零基础入门学习(六) SQL BETWEEN 操作符 BETWEEN 操作符选取介于两个值之间的数据范围内的值.这些值可以是数值.文本或者日期. SQL BETWEEN 语法 SELECT co ...

  8. 一期完结《一篇文章让你从HTML零基础入门前端开发》12.28

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRcXH9FM-1672214813897)(./assets/%E7%8E%84%E5%AD%90Shaer-%E4% ...

  9. 生日祝福小程序_广告配音剪映零基础入门教程第二十六篇:如何给朋友制作生日祝福视频...

    经常听到小伙伴问到生日祝福视频怎么做,当然我想既然要为他人做生日祝福视频,那么这个人必定是自己身边比较重要的人,而生日又是每个人都是非常重要的,在这种充满意义的时刻,我们想给自己极其重要的人送上一份祝 ...

  10. SQL零基础入门学习(十六)

    SQL零基础入门学习(十五) SQL函数 SQL MAX() 函数 MAX() 函数返回指定列的最大值. SQL MAX() 语法 SELECT MAX(column_name) FROM table ...

最新文章

  1. weblogic公布的项目用途myeclipse正常启动,点击startWeblogic.cmd报错解决方案
  2. 推荐抓虾在线RSS阅读
  3. oracle--pl/sql变量定义----
  4. Windows SDK 非模态对话框的消息处理
  5. window.btoa
  6. 做生意成败难料,你见过亏损最惨的人有多惨呢?
  7. Acision推出“ forgeathon” –第一个WebRTC应用挑战
  8. 我现写掼蛋游戏就是要努力奋斗
  9. 计算机系统-电路设计10-寄存器的内部电路实现(输入与输出不同线)
  10. 比较浮点值有多危险?
  11. Java 网络编程(三) 创建和使用URL访问网络上的资源
  12. 力扣-72 编辑距离
  13. 移动端数据爬取和Scrapy框架
  14. 呼吁各行业实现无纸化办公
  15. java整人代码大全_整人代码vbs大全分享
  16. datax(27):不太常见配置项querySql、preSql、postSql、splitPk
  17. 如何让你的程序员不要厌倦工作?
  18. rabbitMQ队列解绑
  19. java实现第八届蓝桥杯平方十位数
  20. 网页不能自动播放视频、音频的解决方案

热门文章

  1. 面试中爱问的大数量的问题总结
  2. html不同app可以缓存多少,HTML5 AppCache和普通浏览器缓存之间有什么区别?
  3. 换了路由器电脑都连不上网了_如果你连汽滤多久换一次,都不知道,就不要说自己是老司机了...
  4. 子过程或函数未定义_Power Pivotamp;Power BI DAX函数说明速查
  5. Java:电脑安装多版本jdk并切换版本
  6. java 符_java运算符
  7. 机器学习_回归和分类的区别
  8. 目录_计算机视觉——算法及应用
  9. 使用 YARD Stick One 进行重放信号
  10. opencv程序在未安装opencv环境下运行方法总结