TensorFlow(Python)入门

简介

分为CPU运行和GPU运行
GPU安装起来比较麻烦 这里先以CPU为主

安装

pip install tensorflow==1.15.0

入门

tensorflow playground(游乐场) TensorFlow可视化学习神经网络
www.playground.tensorflow.org
DATA数据集   FEATURES特征   HIDDEN LAYERS隐含层   OUTPUT输出
类似于人的1000亿脑细胞 神经元 分层 分位置分布在大脑中
第一层 neurons神经元4个 (可以加减调节个数) 神经元就是数学上的方程
输入----->运算---->输出
在这里插入图片描述
这里的数据集是一个非线性的 第一层神经元 切了四刀 切完之后需要进行转换通过激活函数,就是最上面的Activation(这里可以进行选择) 先用Tanh 它是双曲正切函数 通过它将直线变弯来进行分类。
最上面: Epoch训练次数   Learning rate学习率    Activate激活 Regularization正则化 (分为L1和L2,领回归是L2 罗斯回归L1 弹性网络都有)   Regularzaion rate正则化率    Problem type问题类型(分类和回归)

Activation

Sigmoid s型曲线 逻辑斯蒂是来自线性模块 求解出来的是线性方程 代入到Sigmoid中就变成曲线 就变成了概率 就可以解决分类问题 现实中有很多都不是线性问题
tanh 也是弯的 双曲正切
ReLU 线性整流函数 又称修正线性单元

运行

点击左上角的运行按钮
可以将x1和x2 理解为x坐标和y坐标 提供的是二维数据
神经网络每一层和下一层之间通过’线’连接起来,这些线就是方程的斜率,
有的线细有的线粗 线越粗就说明权重越大 越重要
最后的结果就是 最后的两个神经元的组合
在这里插入图片描述
神经元数量可以调节,使得结果更好 OUTPUT下面 是损失 损失越小越好
从神经元图中可以看出数据就像从左面流到右面 所以谓之曰 Tensor(张量—>向量—>数据)Flow流
也可以调节 FEATURES 叫做特征衍生

优化神经网络

方式一:神经元多一些–>网络强大–>系数,关系复杂
方式二:特征衍生
方式三:调整激活函数
方式四:正则化
 

如果想使用GPU的话

1.pip install tensorflow-gpu
2.下载 CUDA 下载CUDNN
3.重启电脑 (注意 TensorFlow-gpu版本与CUDA以及CUDNN版本要保持一致 CUDA-win10-9.0 CUDNN-7.0.4-FourCuda9.0)
 

代码实现神经网络构成过程

在这里插入图片描述
这里是线性问题进行分类 而且右图线穿过坐标原点 只需要考虑斜率 左面四个斜率合成右面两个斜率 再组合合成一个斜率 这里可以用 ∑ \sum 表示合成 橙色表示正蓝色表示负

启动python jupyter notebook

#导包
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 数据两个特征:横坐标x,纵坐标y
# 第一层的第一个神经元
# x ---> -0.77
# y ---> -0.22
-0.77*x - 0.22*y = 0
# 第一层的第二个神经元
#  x ---> -0.38
#  y ---> -0.79
-0.38*x - 0.79*y = 0
# 第二层神经元方程
# f1:第一层的第一个神经元  ---> 0.85
# f2:第一层的第二个神经元  ---> 0.77
0.85*(-0.77*x - 0.22*y) + 0.77*(-0.38*x - 0.79*y) = 0
(-0.77*0.85 - 0.77*0.38)*x - (0.85*0.22 + 0.77*0.79)*y = 0
y = (-0.77*0.85 - 0.77*0.38)/(0.85*0.22 + 0.77*0.79)*x
y = -1.19*x

f = lambda x : -1.19*x
plt.figure(figsize=(8,8))
x = np.linspace(-5,5,100)
y = f(x)
plt.plot(x,y)
plt.axis([-6,6,-6,6])
#画出来的线一样

TensorFlow使用

import warnings
warnings.filterwarnings('ignore')
import numpy as np
import tensorflow as tf

# 现在很多代码用的都是1.x
# 最新版本2.x
# 1.x和2.x使用区别很大的
# 2.x慢慢取代1.x
tf.__version__

#常量的计算
nd1 = np.random.randint(0,10,size = 5)
nd1
# Tensor:张量-------->向量--------->数据(ndarray)
# Flow 流动
# TensorFlow:数据流图(数据流动方式进行计算)
# 见名知意
s = tf.reduce_sum(nd1,name = 'sum') #求和
sess=tf.Session() 
sess #<tensorflow.python.client.session.Session at 0x211340d8b00>
sess.run(s) #拿s里面的数值
m = tf.reduce_mean(nd1.astype(np.float16)) #求平均
with tf.Session() as sess: 
    print(sess.run(m))

c = tf.constant('Hello Tensorflow') #定义常量
c2 = tf.constant(1024)
c3 = tf.constant(512)
a = tf.add(c2,c3)
b = c3 - c2
d = tf.abs(b)
m = tf.multiply(10,8) #乘法
di = tf.divide(1024.0,100.0) #除
di2 = b/d
with tf.Session() as sess:
    print(sess.run(c).decode('utf-8')) #不解码 带b''
    print(sess.run(c2))
    print(sess.run(a))
    print(sess.run(b))
    print(sess.run(d))
    print(sess.run(m))
    print(di) #代码格式不统一 不同人写的
    print(sess.run(di2))

#矩阵操作
a = np.random.randint(0,10,size = (2,3))
b = np.random.randint(0,10,size = (3,4))
a.dot(b)
c = tf.matmul(a,b) #矩阵乘法
with tf.Session() as sess:
    print(sess.run(c))

#变量运算
# 求解方程时,系数和截距都是变量
v = tf.Variable(initial_value=0,dtype=np.float16,name = 'V1') #变量 初始值
v2 = tf.Variable(initial_value=3.14,dtype=tf.float16,name = 'V2') #起名字 报错时会指定
with tf.Session() as sess: 
#     变量,初始化
    sess.run(tf.global_variables_initializer())
    result = sess.run([v,v2])
    print(result)   
#     将变量更新一下
    assign = tf.assign(v,2.718) #赋值操作
    sess.run(assign)  #需要运行一下 2.718才会赋给v
    sess.run(tf.assign_sub(v2,2)) #减法   
    print(sess.run([v,v2]))
with tf.Session() as sess:
   print(sess.run(tf.random_normal(shape = [10])))

# 占位符,placeholder
A = tf.placeholder(dtype=tf.float32,shape = (3,4),name = 'A')
B = tf.placeholder(dtype=np.float32,shape = (4,5),name = 'B')
C = tf.matmul(A,B) #(3,5) 没有数只有形状
with tf.Session() as sess:    
    b = sess.run(tf.random_normal(shape = [4,5]))    
    ret = sess.run(C,feed_dict={A:np.random.randint(0,5,size = (3,4)),B:b})    
    print(ret)
# 占位符,placeholder
A = tf.placeholder(dtype=tf.float32,shape = (None,4),name = 'A')
B = tf.placeholder(dtype=np.float32,shape = (4,None),name = 'B')
C = tf.matmul(A,B)
with tf.Session() as sess:  
    b = sess.run(tf.random_normal(shape = [4,2]))    
    ret = sess.run(C,feed_dict={A:np.random.randint(0,5,size = (10,4)),B:b})    
    print(ret) #(10,2)
# 占位符,placeholder
A = tf.placeholder(dtype=tf.float32,shape = None,name = 'A')
B = tf.placeholder(dtype=np.float32,shape = None,name = 'B')
C = tf.matmul(A,B)
with tf.Session() as sess:    
    b = sess.run(tf.random_normal(shape = [4,2]))    
    ret = sess.run(C,feed_dict={A:np.random.randint(0,5,size = (10,4)),B:b})    
    print(ret) #(10,2)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值