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.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+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','Trouser','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.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^
modelpile(loss="sparse_categorical_crossentropy",
optimizer="sgd",
metrics=["accuracy"])
python入门教程 下载#optimizer是使⽬标函数变⼩
这个时候进⾏⼀下操作:
model.layers删除文件夹需要管理员权限
Out[3]:
[<tensorflow.python.Flatten at 0x1dc66ee9fc8>,
<tensorflow.python.Dense at 0x1dc6d3598c8>,
im安卓开发工具箱下载<tensorflow.python.Dense at 0x1dc7085afc8>,
<tensorflow.python.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是验证⾥⾯是验证集合
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论