19、tensorflow神经网络
2020-05-12 本文已影响0人
羽天驿
一、原理
“TensorFlow是一个使用数据流图进行数值计算的开源软件库。图中的节点表示数学运算,而图边表示在它们之间传递的多维数据阵列(又称张量)。灵活的体系结构允许你使用单个API将计算部署到桌面、服务器或移动设备中的一个或多个CPU或GPU。
[图片上传失败...(image-3d5b1e-1589252952983)])
(一)、Tensorflow
- 所有的深度学习的原理都是类似的。
- pip install tensorflow
- 这个包比较大,包扣cpu,Gpu
(二)、深度学习
- keras--高就api
- 对方法进行了简单的封装
- pytorch 是Facebook开发的
- cntk--微软开发的
- paddlepaddle百度开发的
- 上面这些的基本的原理都是类似的
- 我们主要介绍tensorflow pytorch
- 市场需要--tensorflow需求最多的
(三、)tensorflow入门及原理
- 官方网站:
http://www.tensorfly.cn/tfdoc/get_started/basic_usage.html - 什么是机器?
- 涉及多个领域
- 原来使用sklearn机器学习
- 现在使用TensorFlow
- 差异只是计算方式不一样
*深度学习,神经网络模仿人类大脑的工作方式
*解决实际的问题 - 什么是深度学习(神经网络)?
- 是一种模仿动物的神经网络结构进行信息处理的数学的模型,在工程与学术界也常直接简称为神经网络或类神经网络。
- 深度学习:思维的转变---深度学习模仿大脑的操作,有一些模型是不可以解释的,它的模型解决问题了,但是不知道原理是怎么样的。
- 模型相当的复杂,它是由几百万或者上千万的参数组成的,这就是相当复杂的。
- 所以深度学习这个模型,和sklearn的模型是完全不一样的。
- 深度学习不仅仅是代码--更是一种人类的思想.。
- 不能把机器学习理解成简单的编程=代码的实现,更是要理解成一种人工智能神经网络的实现。
(四、)mnist数据加载的不同的方式。
- 方式一:
- from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
# Import MNIST
from tensorflow.examples.tutorials.mnist import input_data
# 电脑上没有压缩文件,自动网上下载!!!
mnist = input_data.read_data_sets(one_hot=True,validation_size = 0)# 告诉这个方法,去当前目录下加载树
# Load data
X_train = mnist.train.images
Y_train = mnist.train.labels
X_test = mnist.test.images
Y_test = mnist.test.labels
Extracting C:/Users/softpo.DESKTOP-PN692CT/tfdata/train-images-idx3-ubyte.gz
Extracting C:/Users/softpo.DESKTOP-PN692CT/tfdata/train-labels-idx1-ubyte.gz
Extracting C:/Users/softpo.DESKTOP-PN692CT/tfdata/t10k-images-idx3-ubyte.gz
Extracting C:/Users/softpo.DESKTOP-PN692CT/tfdata/t10k-labels-idx1-ubyte.gz
使用Tensorflow中的API对数据,进行批量获取
后面目的:同tf.data为神经网咯提供数据
data = tf.data.Dataset.from_tensor_slices((X_train,Y_train)).repeat(10).shuffle(5000).batch(1000)
i = 0
for d in data:
i+=1
print(i)
600
可视化
import matplotlib.pyplot as plt
plt.imshow(X_train[10000].reshape(28,28))
digit = Y_train[10000] #独热编码,在索引7的位置,占位是1
print(digit)
print(digit.argmax())
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
3
output_4_1.png
- 方式二
- from tensorflow.keras.datasets import mnist
导包keras中加载的mnist
from tensorflow.keras.datasets import mnist
import tensorflow as tf
(X_train,y_train),(X_test,y_test) = mnist.load_data()
可视化
import matplotlib.pyplot as plt
plt.imshow(X_train[1022].reshape(28,28))
<matplotlib.image.AxesImage at 0x14bde488>
output_5_1.png
将数据打乱顺序批量获取数据
# Tensor 矢量,张量,numpy数组
# TensorFlow 张量的流动计算
# slices 切片
data = tf.data.Dataset.from_tensor_slices((X_train,y_train))#加载数据
data = data.repeat(10)#重复
data = data.shuffle(5000)#打乱顺序
data = data.batch(1000)#一批去多少数据
# 原数据 60000个,一批取1000个取 60次,重复10次 总共取出600次
i = 0
for d in data:
i+=1
print(i)
600
(五、)tensorflow基本操作
- 加减乘除---等
- 使用tf进行数据的计算的时候,数据的类型必须是对应的。
- a2=tf.cast(a,tf.float32)这个是可以转换数据的类型的。
- tf.reshape() tf中改变数据的形状
- tensorflow的基本操作和numpy中操作是类似的,许多方法名字都是一样的,基本都是一样的、
- 代码示例:
import tensorflow as tf
import numpy as np
a = tf.constant(np.random.randint(0,10,size=(3,5)))
b = tf.constant(np.random.randint(0,10,size=(1,5)))
c=a+b
c
# 上面的a b的形式不一样的但是还是可以进行运算是你因为,numpy广播极致
<tf.Tensor: shape=(3, 5), dtype=int32, numpy=
array([[13, 15, 15, 8, 8],
[12, 11, 15, 5, 3],
[11, 18, 17, 12, 5]])>
# tensorflow为我们提供了方法
tf.add(a,b)
tf.multiply(a,b)
<tf.Tensor: shape=(3, 5), dtype=int32, numpy=
array([[36, 54, 56, 16, 0],
[32, 18, 56, 4, 0],
[28, 81, 72, 32, 0]])>
tf.pow(8.0,0.5)
# 幂运算
<tf.Tensor: shape=(), dtype=float32, numpy=2.828427>
a2=tf.cast(a,tf.float32)
a2
# 数据类型的转换
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[9., 6., 7., 4., 8.],
[8., 2., 7., 1., 3.],
[7., 9., 9., 8., 5.]], dtype=float32)>
tf.pow(a2,0.5)
# 注意使用tf计算的时候,数据的类型必须是对应的
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[3. , 2.4494898, 2.6457512, 2. , 2.828427 ],
[2.828427 , 1.4142135, 2.6457512, 1. , 1.7320508],
[2.6457512, 3. , 3. , 2.828427 , 2.236068 ]],
dtype=float32)>
tf.math.log(10.0)
# int类型是无法进行计算的。浮点数是可以的
# 对数的计算
<tf.Tensor: shape=(), dtype=float32, numpy=2.3025851>
降维操作
a=tf.cast(a,tf.int32)
# tf.cast()===类型转换方法
# 上面的a是一个Tensor对
# 这个numpy就是之前的numpy
# 获取数据
a.numpy()
array([[9, 6, 7, 4, 8],
[8, 2, 7, 1, 3],
[7, 9, 9, 8, 5]])
a.shape
TensorShape([3, 5])
a.numpy().sum(axis=0)
array([24, 17, 23, 13, 16])
tf.reduce_sum(a,axis=0)
<tf.Tensor: shape=(5,), dtype=int32, numpy=array([24, 17, 23, 13, 16])>
# 这个是tf提供的求和的方法。这个是降维的操作
tensorflow 和我们之前学过的numpy都是类似的
tf的矩阵运算
b=tf.constant(tf.random.normal(shape=[15]))
b=tf.reshape(b,shape=(5,3))
# tf.reshape tf中改变数据的形状
# tf.float32 tf中改变数据类型的方法
a=tf.cast(a,tf.float32)
# a 和b进行矩阵运算
tf.matmul(a,b)
# b的形状不对应,
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[-13.390648 , -5.2129335, 12.440157 ],
[ -5.132538 , -8.135062 , 6.5191073],
[-19.185709 , -15.828344 , 19.550457 ]], dtype=float32)>
(六、)tensorflow的变量
- 常量: tf.constant()常量
- 变量:tf.Variable() 变量
- 算法训练过程中,变量是调整的,变大变小,适应我们的数据--这就是变量
- 常量是无法修改的数据
- 变量是可以修改的数据
- 变量的应用:大小的变换,参数得是可以调整的都是适用变量来定义的。
- 总体 来说变量的定义和我们所指定的变量的定义是一样的,不同的是定义的方式是不一样的。
*常量变量代码如下: