Tensorflow2.0入门教程(一)
之前写过一些机器学习的基础算法,发现大家都不感兴趣,痛定思痛了很久,决定深入浅出的写这一门学问。
这里写目录标题
- 1.下载
- 2.tensorflow-kears
- 2.1分类问题和回归问题
- 2.1.1目标函数
- 2.1.2实战代码
1.下载
开始咱们先讲一下下载吧,注意事项:
1.python3.6以上版本用tensorflow会很麻烦
2.我是用anaconda来下载的tensorflow包
3.下载spyder和各种包咱们都可以用anaconda navigator,就是那个个有页面的。
2.tensorflow-kears
主要讲解api估计讲理论各位也不想听,也没有时间去听。
1.实现在tensorflow.keras下
from tensorflow import keras
tf.keras和keras的区别(懂得自然懂,不懂不看了)
1.tf.keras全面支持eager mode
2.tf.kears支持基于tf.data的模型训练
3.tf.keras支持TPU训练
4.tf.keras支持tf.distribution中的分布式策略
2.1分类问题和回归问题
分类问题预测的是数据的类别,模型输出的是概率分布。
例子:蔬菜有三个类别可以选:西红柿,玉米(这是蔬菜吗?),土豆,得到三分类问题输出的是【0.1,0.6,0.3】咱们得到玉米的概率最大,所以说预测到这个东西是玉米啊。
回归问题预测的是值,模型输出的是一个实数值。
(就像咱们小时候学的最小二乘法就是一个预测值的方法)
2.1.1目标函数
为什么需要目标函数? 参数不可能一下子就预测的很准,所以我们需要逐步调整参数。
Model A[0.1,0.1,0.8] Model B[0.1,0.4,0.5]
就当第二个参数才是正确的,但是模型A和B都错了,但是模型B预测的更加准确。目标函数就是能衡量模型的好和坏
分类问题需要衡量目标类别与当前预测的差距。
例子:假设三分类问题输出的例子为:【0.2,0.7,0.1】
咱们输出出来的是第二个最大,其实真实的数据为【0,0,1】(这个为one-hot编码)
咱们就要看这两个类别的差距
one-hot编码,把正整数变为向量表达:生成一个长度不小于正整数的向量,只有正整数的位置处为1,其余位置都为0.
分类问题常用的几个方法:
1.平方差损失
2.交叉熵损失
这里咱们就不写公式了,直接写例子:
预测值:【0.2,0.7,0.1】
真实值:【0,0,1】
损失函数值:[(0.2-0)2+(0.7-0)2+(0.1-1)2]*0.5=0.65(平方差损失)
回归问题的方式:
1.平方差损失
2.绝对值损失
模型的训练就是调整参数使目标函数逐渐变小的过程。(只看这句话可能会不明白)
2.1.2实战代码
keras搭建分类模型(api可以在https://tensorflow.google.cn/这个网站自行查找)
import matplotlib as mat
import matplotlib.pyplot as plt
import numpy as np
import sklearn
import pandas as pd
import os,sys,time
import tensorflow as tf
from tensorflow import keras
print(sys.version_info)
for module in mat,np,pd,sklearn,tf,keras:print(module.__name__,module.__version__)
上面是用的包和输出一下我的版本,版本不同api的名字和用法也有区别。可能会报错。
这是我的版本:
matplotlib 3.1.3
numpy 1.17.3
pandas 0.25.2
sklearn 0.22.1
tensorflow 2.0.0
tensorflow_core.keras 2.2.4-tf
提取信息方法:
fashion_mnist=keras.datasets.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)’
输出为:
(5000, 28, 28) (5000,)
(55000, 28, 28) (55000,)
(10000, 28, 28) (10000,)
我把可能出现的下载不成功怎么解决的问题写在问题专栏里了,大家根据需要可以看一下。如果有其他问题,在评论区说一下,一起讨论。
显示图片(我在想要不要写个博客把每个函数的参数都写明白):
def show_picture(img):plt.imshow(img, cmap="binary")#imshow()函数负责对图像进行处理,并显示其格式,但是不能显示。#show()可以显示plt.show()
show_picture(x_train[0])
显示的图片:
显示一群图片:
def show_imgs(n_rows,n_cols,x_data,y_data,class_names):assert len(x_data)==len(y_data)assert n_rows*n_cols<len(x_data)plt.figure(figsize=(n_cols*1.4,n_rows*1.6))for row in range(n_rows):for col in range(n_cols):index=n_cols*row+colplt.subplot(n_rows,n_cols,index+1)#小图plt.imshow(x_data[index],cmap="binary",interpolation='nearest')plt.axis('off')#不需要坐标系plt.title(class_names[y_data[index]])plt.show()
class_names=['T-shirt','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']
#这个是百度的规律
show_imgs(3, 5, x_train, y_train, class_names)
建立keras模型:我们用的是Sequential函数我直接给大家api连接:
点击这里打开api官方链接
Sequential就是把所有的层次堆叠起来(听不懂别着急,知道堆叠两个字就好)。
model=keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
#展开图片形成的28×28一维向量
model.add(keras.layers.Dense(300,activation="relu"))
#300个单元,激活函数是relu的全连接层。是分类器的作用
model.add(keras.layers.Dense(100,activation="relu"))
model.add(keras.layers.Dense(10,activation="softmax"))
#控制输出用softmax,输出的长度为10
#relu:y=max(0,x),输入一个x,如果x>0输出x,如果x<0,输出0
#softmax:把向量变成概率分布:x=[x1,x2,x3],-->y=[e^x1^/sum,e^x2^/sum,e^x3^/sum],sum=e^x1^+e^x2^+e^x3^
model.compile(loss="sparse_categorical_crossentropy",optimizer="sgd",metrics=["accuracy"])
#optimizer是使目标函数变小
这个时候进行一下操作:
model.layers
Out[3]:
[<tensorflow.python.keras.layers.core.Flatten at 0x1dc66ee9fc8>,<tensorflow.python.keras.layers.core.Dense at 0x1dc6d3598c8>,<tensorflow.python.keras.layers.core.Dense at 0x1dc7085afc8>,<tensorflow.python.keras.layers.core.Dense at 0x1dc7086b048>]model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten_1 (Flatten) (None, 784) 0
_________________________________________________________________
dense_3 (Dense) (None, 300) 235500
_________________________________________________________________
dense_4 (Dense) (None, 100) 30100
_________________________________________________________________
dense_5 (Dense) (None, 10) 1010
=================================================================
Total params: 266,610
Trainable params: 266,610
Non-trainable params: 0
_________________________________________________________________
现在咱们讲一下全连接层是什么:[None,784] *w+b->[None,300] (->是全连接层的操作,w是乘到的矩阵) 其中w.shape=[784,300],b=[300]
接着咱们要开始训练咱们的模型了。
history=model.fit(x_train,y_train,epochs=10,validation_data=(x_valid,y_valid))
#validation_data是验证里面是验证集合
Tensorflow2.0入门教程(一)相关推荐
- pip更新失败_最全Tensorflow2.0 入门教程持续更新
最全Tensorflow 2.0 入门教程持续更新: Doit:最全Tensorflow 2.0 入门教程持续更新zhuanlan.zhihu.com 完整tensorflow2.0教程代码请看ht ...
- Tensorflow2.0入门教程22:RNN网络实现文本分类
RNN实现文本分类 import tensorflow as tf 下载数据集 imdb=tf.keras.datasets.imdb (train_x, train_y), (test_x, tes ...
- Tensorflow2.0入门教程12:自定义循环训练模型
自动求导机制 在机器学习中,梯度下降时候需要计算函数的导数,TensorFlow 提供了强大的自动求导机制来计算导数, 使用tf.GradientTape()自动求导: tf.Variable():定 ...
- tesseract4.0.0 中文语言包_一份TensorFlow2.0中文教程
近两个月,网上已经出现了大量 TensorFlow 2 0 英文教程.在此文章中,本文为大家推荐一个持续更新的中文教程,以便大家学习.来源:机器之心 今年 3 月份,谷歌在 Tensorflow De ...
- air调用java,AIR2.0入门教程:与Java应用交互
在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...
- creo如何更改打开时显示方式_Creo4.0入门教程(3):设置工作目录和打开以及保存文件...
原标题:Creo4.0入门教程(3):设置工作目录和打开以及保存文件 目标: 1.设置工作目录 2.文件的打开和保存 1.设置工作目录 工作目录是打开和保存文件的指定位置.通常默认工作目录为启动 Cr ...
- RxJava 2.0 入门教程
RxJava 2.0 入门教程 RxJava 2.0 是来自NetFlix的开源java异步编程框架.和java 8 lambda表达式很接近,响应式编程的基本构建快是被观察对象(Observable ...
- c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...
C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...
- matlab 7.1教程pdf,MATLAB7[1].0入门教程.ppt
<MATLAB7[1].0入门教程.ppt>由会员分享,可在线阅读,更多相关<MATLAB7[1].0入门教程.ppt(34页珍藏版)>请在人人文库网上搜索. 1.1/33,2 ...
最新文章
- 物联网兴起 嵌入式系统安全日益受关注
- R语言关系操作符:>、<=、!=、>=、==、
- 如何导入给定名称的模块为字符串?
- delphi webbrowser 经常用法演示样例
- WebSnapshotsHelper(HTML转换为图片)
- Spring的常见问题及答案
- 每周分享之cookie详解
- 【英语学习】【Level 07】U05 Best Destination L2 The City of Lights
- linux查看文件第三行,学习linux第三课!新手必须掌握的linux命令
- 网络管理员考试串讲视频教程
- 【小米】刷入第三方ROM统一教程
- 美团外卖广告投放系统的设计
- SAP Transactions
- Python 基于 uiautomator2 实现《全民开喵铺》自动收币,自动签到,自动浏览得喵币
- 转载:如何给公司取英文名字
- 如何关闭WPS烦人广告
- 2021-06-03 【论文笔记】Cross-domain Correspondence Learning for Exemplar-based Image Translation
- 【C++入门】命名空间的定义与使用
- oracle 数据库基础知识复习
- UIImageView常用操作
热门文章
- intellji External Libraries下依赖包找不到解决方法
- 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching
- FAT磁盘分配策略简说
- vue.js 添加 fastclick的支持
- python篇第10天【While 循环语句】
- Python replace() 和 re.sub() 字符串字符替换
- Golang教程:结构体
- 《开源网店系统iWebShop2.0模板开发教程》的说明
- 【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
- Myeclipse笔记