【TensorFlow】01 Tenso

发布时间:2019-08-24 09:20:52编辑:auto阅读(1695)

    TensorFlow简介与Python基础

    2018.9.10

    一、概述

    • TF使用数据数据流图进行数值计算,亮点是支持异构设备分布式计算机
    • 常用的ML库有MXNet Torch/Pytorch Theano CNTK Caffe等
    • 0阶张量(纯量),1阶张量(向量),2阶张量(矩阵)tensor(张量) flow(流动)
    • 编程模式 命令式编程(Torch) 符号式编程(Tensorflow,theano 描述算法流程 放到其他语言执行)
    • TF使用数据流图来进行编程 是一种推断结构
    • TF的高层库()如Kearas(对用户友好,模块化)
    • Deep-learning主要的运算是浮点运算
    • TF的亮点之一是autograph模式
    • TF的功能:设计、训练、部署(唯一一个形成完整生态的ML sys)

    二、环境配置

    虚拟环境的安装

    1. 使用pip命令安装venv
      sudo pip install virtualenv
    2. cd 项目目录 切换到项目所在的目录
    3. 激活虚拟环境
      virtualenv --system-site-packages venv
    4. 退出venv
      deactivate

      5、查看venv环境的python包版本

      pip freeze

    三、科学工具和流程

    • 编译语言C,C++,Fortran 快,优化好,但语法不友好
    • 脚本语言: Matlab 开发友好,收费,基础语言缺乏
      R语言 偏向统计,不能完成所有的任务
    • 高级的pyhton shell:IPython,Jupyter
    • python包:
      Numpy:强大的数值对象操作
      Scipy:高级的数据处理程序 (优化、回归差值等)
      Matplotlib:2D可视化 (不可交互,对3D图像支持不好)

    四、python基础

    (一)数据类型

    python的变量类型不像C++一样在定义时必须制定参数的变量类型,是一种动态语言

    整数

    Python可以处理任意大小(没有大小限制)的正负整数,使用0x作为前缀表示十六进制

    浮点数(小数)

    按照科学计数法表示的数字,比如1.23e9代表$1.23*e^9$

    由于储存方式不同,整数永远是精确的,但是浮点数可以四舍五入

    字符串

    字符串是以单引号或者双引号括起来的任意文本

    如果字符串里有很多字符需要转义,为简化可以使用r'',引号内的字符串默认不转义

    print('\\\t\\')
    \   \
    print(r'\\\t\\')
    \\\t\\

    布尔值

    boolean只有True和false两种,其结果可由比较运算,逻辑运算得出(and,or,not)

    • 当两个变量比较时,如果给定的变量值小于100,则使用is运算的得到的两个变量所得bool结果为true,否则为false这是由于python在储存同一个变量是当变量的数值小于100是使用同一块内存,而大于100是则不使用同一块内存
    a = 1000
    b = 1000
    print(a is b)
    print(id(a),id(b))
    False
    4526894320 4526894960
    a = 100
    b = 100
    print(a is b)
    print(id(a),id(b))
    True
    4305331680 4305331680

    (二)字符串

    在python保存源代码是,需要制定保存为UTF-8编码,当解释器读取时,在开头加上这两行文字(第一行告诉Unix系统这是一个python可执行程序,win会忽略这个注释,第二行是告诉编译器以utf-8的方式读取,否则中文不能正常编码)

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-

    占位符

    在Python中,格式化方式与C相同,使用%实现。%s表示用字符串替换,%d表示用整数替换,有几个%?后面就需要跟几个变量或值,当变量大于2时需要用括号括起来,有一个的话可以省略

    print("Hi,my name is %s, I'm %d years old."%('Alex',10))
    Hi,my name is Alex, I'm 10 years old.
    占位符 替换内容
    %d 整数
    %f 浮点数
    %s 字符串
    %x 十六进制数

    (三)循环

    for...in循环

    for x in ...就是把每个元素带入变量x,然后执行缩进块的语句

    names = ['A','B','C']
    for name in names:
        print(name)
    A
    B
    C

    使用range(n)可以生成一个迭代器,其值是0 ~ n-1

    sum = 0
    for i in range(101):
        sum = sum + i
    print(sum)
    5050

    while循环

    使用while循环打印100以内所有奇数的和:

    sum = 0
    n = 99
    while n>0:
        sum = sum + n
        n = n - 2
    print(sum)
    2500

    (四)Python数据结构

    list(列表)

    list是有序的集合,可以随时删除和添加元素

    classlist = ['class1','class2','class3']
    len(classlist)  #使用len可以获得列表的长度
    classlist[0] #使用下标可以访问list的元素(以0开始)
    classlist[-1] #使用负下标可以访问倒数的元素
    'class3'

    列表的插入

    classlist.append('class4')  #尾插法
    print(classlist)
    classlist.insert(1,'class5') #指定索引插入
    print(classlist)
    ['class1', 'class2', 'class3', 'class4']
    ['class1', 'class5', 'class2', 'class3', 'class4']

    列表的删除

    classlist.pop()  #如果pop不加参数,则删除最后一个,否则按照索引顺序删除
    print(classlist)
    ['class1', 'class5', 'class2', 'class3']

    注意:

    • list中的元素数据类型可以不同
    • list中可以有另外的list
    • list中一个元素也没有,则其长度为0

    tuple(元组)

    元组的另一名称为有序列表,一旦初始化就不能修改,没有append和pop方法

    tuple存在的意义在于tuple不可变,所以代码更安全,如果可能,尽量用tuple代替list

    当定义只有一个元素的tuple时,需要将这个元素后面加上一个逗号,因为()可能会产生歧义。Python规定单独出现的小括号内容计算结果使其本身。

    t = (1,)  #是(1,)而不是(1)
    print(t)
    (1,)

    注意:

    • 要创建一个内容也不变的tuple必须保证tuple中的每一个元素本身不能变(不允许出现tuple中嵌套list的情况)

    dict(字典)

    dict使用键-值(key-value)存储,具有很快的查找速度

    dic = {'A':95,'B':80,'C':75}
    print(dic['A'])
    95

    修改dic某个key的值:

    dic['A']=60
    print(dic['A'])
    60

    对比list与dict:
    dict:查找插入速度快,不会因为key的增加而变慢,但浪费内存多
    list:查找插入时间随着元素的增加而增加,但占用空间小,浪费内存少

    注意:

    • dic是一种用空间换时间的存储结构(hash)
    • key必须是不可变的对象

    set(集合)

    set与dict类似,是key的集合,但不存储value,没有重复的key

    重复的元素在set中被自动过滤掉:

    s = set([1,1,2,2,3,3])
    print(s)
    {1, 2, 3}

    其他方法:
    add(key)可以添加元素到set中
    remove(key)可以删除set中的元素

    集合操作:

    s1 = set([1,2,3])
    s2 = set([2,3,4])
    print(s1&s2)
    print(s1|s2)
    {2, 3}
    {1, 2, 3, 4}

    (五)切片

    L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

    取得前三个元素:

    L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    print(L[:3])  
    #L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素
    #如果第一索引是0,可以省略
    ['Michael', 'Sarah', 'Tracy']

    也可以负切片(记住倒数第一个元素的索引是 -1):

    L[-2:]
    ['Bob', 'Jack']

    前10个数,每两个取一个(第3个参数n为步长,代表隔n个数取出一个):

    L = list(range(100))
    >>> L[::5]
    [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
    [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

    (五)jupyter使用

    魔法命令

    import numpy as np
    np.reshape??  #在命令后加??可以查看对应命令的帮助文档
      File "<ipython-input-22-38dc740ee985>", line 2
        np.reshape??  #在命令后加??可以查看对应命令的帮助文档
                  ^
    SyntaxError: invalid syntax
    a =[1,3,5]
    %run my_file.py  #百分号后面的为魔法命令,可以执行非python的内容
    %whos  #魔法命令:查看变量
    %ls #支持大部分下的Linux命令
    %pwd
    %timeit a    #使用timeit监测性能
    for item in [1,3,5]:
        print(item)
    for item in range(10):     #range()可以生成迭代器,等价于range(0,10)
        print(item)

关键字

上一篇: python用法总结

下一篇: 还糊涂吗?(3)