Tensorflow2.0⼊门教程(⼀)
之前写过⼀些机器学习的基础算法,发现⼤家都不感兴趣,痛定思痛了很久,决定深⼊浅出的写这⼀门学问。
这⾥写⽬录标题
1.下载
开始咱们先讲⼀下下载吧,注意事项:
1.python3.6以上版本⽤tensorflow会很⿇烦
2.我是⽤anaconda来下载的tensorflow包
3.下载spyder和各种包咱们都可以⽤anaconda navigator,就是那个个有页⾯的。
主要讲解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】
222
损失函数值:[(0.2-0)+(0.7-0)+(0.1-1)]*0.5=0.65(平⽅差损失)
回归问题的⽅式:
1.平⽅差损失
2.绝对值损失
卧看牛郎织女星模型的训练就是调整参数使⽬标函数逐渐变⼩的过程。(只看这句话可能会不明⽩)
2.1.2实战代码
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.datats.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):
asrt len(x_data)==len(y_data)
asrt 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+col
plt.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','Trour','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot'] #这个是百度的规律
show_imgs(3,5, x_train, y_train, class_names)
建⽴keras模型:我们⽤的是Sequential函数我直接给⼤家api连接:
Sequential就是把所有的层次堆叠起来(听不懂别着急,知道堆叠两个字就好)。
dels.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
单青青#展开图⽚形成的28×28⼀维向量
model.add(keras.layers.Den(300,activation="relu"))
#300个单元,激活函数是relu的全连接层。是分类器的作⽤
model.add(keras.layers.Den(100,activation="relu"))
model.add(keras.layers.Den(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^
optimizer="sgd",
metrics=["accuracy"])
#optimizer是使⽬标函数变⼩
这个时候进⾏⼀下操作:
model.layers
Out[3]:
[<tensorflow.python.Flatten at 0x1dc66ee9fc8>,
<tensorflow.python.Den at 0x1dc6d3598c8>,
<tensorflow.python.Den at 0x1dc7085afc8>,
<tensorflow.python.Den at 0x1dc7086b048>]
model.summary()
Model:"quential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten_1 (Flatten)(None,784)0
_________________________________________________________________
den_3 (Den)(None,300)235500
_________________________________________________________________
den_4 (Den)(None,100)30100
_________________________________________________________________
den_5 (Den)(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是验证⾥⾯是验证集合