之前写过一些机器学习的基础算法,发现大家都不感兴趣,痛定思痛了很久,决定深入浅出的写这一门学问。

这里写目录标题

  • 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入门教程(一)相关推荐

  1. pip更新失败_最全Tensorflow2.0 入门教程持续更新

    最全Tensorflow 2.0 入门教程持续更新: Doit:最全Tensorflow 2.0 入门教程持续更新​zhuanlan.zhihu.com 完整tensorflow2.0教程代码请看ht ...

  2. Tensorflow2.0入门教程22:RNN网络实现文本分类

    RNN实现文本分类 import tensorflow as tf 下载数据集 imdb=tf.keras.datasets.imdb (train_x, train_y), (test_x, tes ...

  3. Tensorflow2.0入门教程12:自定义循环训练模型

    自动求导机制 在机器学习中,梯度下降时候需要计算函数的导数,TensorFlow 提供了强大的自动求导机制来计算导数, 使用tf.GradientTape()自动求导: tf.Variable():定 ...

  4. tesseract4.0.0 中文语言包_一份TensorFlow2.0中文教程

    近两个月,网上已经出现了大量 TensorFlow 2 0 英文教程.在此文章中,本文为大家推荐一个持续更新的中文教程,以便大家学习.来源:机器之心 今年 3 月份,谷歌在 Tensorflow De ...

  5. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

  6. creo如何更改打开时显示方式_Creo4.0入门教程(3):设置工作目录和打开以及保存文件...

    原标题:Creo4.0入门教程(3):设置工作目录和打开以及保存文件 目标: 1.设置工作目录 2.文件的打开和保存 1.设置工作目录 工作目录是打开和保存文件的指定位置.通常默认工作目录为启动 Cr ...

  7. RxJava 2.0 入门教程

    RxJava 2.0 入门教程 RxJava 2.0 是来自NetFlix的开源java异步编程框架.和java 8 lambda表达式很接近,响应式编程的基本构建快是被观察对象(Observable ...

  8. c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...

    C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...

  9. matlab 7.1教程pdf,MATLAB7[1].0入门教程.ppt

    <MATLAB7[1].0入门教程.ppt>由会员分享,可在线阅读,更多相关<MATLAB7[1].0入门教程.ppt(34页珍藏版)>请在人人文库网上搜索. 1.1/33,2 ...

最新文章

  1. 物联网兴起 嵌入式系统安全日益受关注
  2. R语言关系操作符:>、<=、!=、>=、==、
  3. 如何导入给定名称的模块为字符串?
  4. delphi webbrowser 经常用法演示样例
  5. WebSnapshotsHelper(HTML转换为图片)
  6. Spring的常见问题及答案
  7. 每周分享之cookie详解
  8. 【英语学习】【Level 07】U05 Best Destination L2 The City of Lights
  9. linux查看文件第三行,学习linux第三课!新手必须掌握的linux命令
  10. 网络管理员考试串讲视频教程
  11. 【小米】刷入第三方ROM统一教程
  12. 美团外卖广告投放系统的设计
  13. SAP Transactions
  14. Python 基于 uiautomator2 实现《全民开喵铺》自动收币,自动签到,自动浏览得喵币
  15. 转载:如何给公司取英文名字
  16. 如何关闭WPS烦人广告
  17. 2021-06-03 【论文笔记】Cross-domain Correspondence Learning for Exemplar-based Image Translation
  18. 【C++入门】命名空间的定义与使用
  19. oracle 数据库基础知识复习
  20. UIImageView常用操作

热门文章

  1. intellji External Libraries下依赖包找不到解决方法
  2. 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching
  3. FAT磁盘分配策略简说
  4. vue.js 添加 fastclick的支持
  5. python篇第10天【While 循环语句】
  6. Python replace() 和 re.sub() 字符串字符替换
  7. Golang教程:结构体
  8. 《开源网店系统iWebShop2.0模板开发教程》的说明
  9. 【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
  10. Myeclipse笔记