【Programming】

涉及 python, c, c++ 的基础编程知识,以及不同深度学习框架的小应用(主要集中在 keras,也有部分 tensorflow,caffe,pytorch)

未完待续,不断更新中


文章目录

  • 1 python(★★★★★)
  • 2 C / C++(★★★★★)
  • 3 Keras / Tensorflow
    • 3.1 人工智能、机器学习与深度学习简介
    • 3.2 深度学习原理
      • 3.2.1 神经传导原理
      • 3.2.2 MLP
    • 3.3 TensorFlow 与 Keras 介绍
      • 3.3.1 TensorFlow 架构图
      • 3.3.2 TensorFlow 简介
      • 3.3.3 TensorFlow 程序设计模式
      • 3.3.4 Keras 介绍
      • 3.3.5 Keras 程序设计模式
      • 3.3.6 Keras 与 TensorFlow 比较
    • 3.4 在Windows / Linux Ubuntu 中安装TensorFlow 与 Keras
    • 3.5 Keras Demos(★★★★★)
    • 3.6 TensorFlow Demos(★★★★★)
  • 附录 A: Use GPU to speed up training
    • A.1 导入tensorflow模块
    • A.2 建立和执行计算图
    • A.3 测试GPU与CPU性能的差别


1 python(★★★★★)

The Library of Python
【Programming】_第1张图片
【python】基本数据类型(1)
【python】基本运算和表达式(2)
【python】导入模块和输入输出(3)
【python】基本控制流程(4)
【python】list(5)
【python】tuple(6)
【python】dict(7)
【python】set(8)
【python】函数(9)
【python】异常处理(10)
【python】类(11)
【python】File(12)
【python】Regular Expression(13)


【python】Coding(Interview)
【python】Leetcode(Data Structure / Algorithm)
【python】Leetcode(Dynamic Programming)
【python】Leetcode(Map)
【python】Leetcode(primer)
【python】Single / Single Cycle / Double Link List
【python】Leetcode(String)
【python】Leetcode(Tree)
【python】Sort Algorithm


【python】axis
【python】Draw a straight line
【python】Linear Algebra(矩阵,向量)
【python】Linux终端没有GUI,如何使用matplotlib绘图
【python】matplotlib(上)
【python】matplotlib & seaborn(下)
【python】Multithreading (多线程)
【python】Neural Network for MNIST classification
【python】numpy & pandas
【python】OpenCV—RGB, Rectangle, Circle, SS(1)
【python】OpenCV—Blur, Threshold, Gradient, Morphology(2)
【python】OpenCV—Edge, Corner, Face Detection(3)
【python】Peppa Pig(turtle、if __name__ == ‘__main__’)
【python】PIL(上)
【python】PIL(下)
【python】random
【python】Scikit-learn中决策树可视化方法
【python】sympy
【python】Tkinter(GUI)
【python】Visualization of field data(NBA)
【python】Word Cloud(宇智波鼬,私密)


【NumPy】 中文文档

【Python】《零基础入门学python》Learning notes


2 C / C++(★★★★★)

【C】数据类型、运算符、表达式(1)

3 Keras / Tensorflow

3.1 人工智能、机器学习与深度学习简介

【Programming】_第2张图片

增强式学习,借助定义 Actions、States、Rewards 的方式不断训练机器循序渐进,学会执行某项任务的算法。常用算法有Q-LearningTD(Temporal Difference)、Sarsa

总结的比较好的一个机器学习框架

【Programming】_第3张图片

3.2 深度学习原理

主要从神经传导原理导入,以 Multilayer Perceptron (MLP) 为例

3.2.1 神经传导原理

是我看过的比较销魂的神经网络模型

【Programming】_第4张图片

[ y 1   y 2 ] = a c t i v a t i o n ( [ x 1   x 2   x 3 ] × [ w 11 w 12 w 21 w 22 w 31 w 32 ] ) + [ b 1   b 2 ] \left [y1 \ y2 \right ]= activation\left ( \left [x1 \ x2 \ x3 \right ]\times \begin{bmatrix} w11 & w12\\ w21 & w22\\ w31 & w32 \end{bmatrix} \right )+\left [b1 \ b2 \right ] [y1 y2]=activation[x1 x2 x3]×w11w21w31w12w22w32+[b1 b2]
1×2 = 1×3 × 3×2 + 1×2

3.2.2 MLP

MNIST
train时,梯度更新,mini-batch,每次读取一批数据进行反向传播算法训练(多样本求均值

【Programming】_第5张图片

损失函数
one-hot encoding

【Programming】_第6张图片

梯度更新过程

【Programming】_第7张图片

一个样本,算一次梯度,就有一个新的w1和w2。mini-batch,多个样本,多个w1和w2求均值

3.3 TensorFlow 与 Keras 介绍

  • TensorFlow:低级深度学习链接库,Brain Team 开发,15年11月公开源码
  • Keras:高级深度学习链接库

3.3.1 TensorFlow 架构图

【Programming】_第8张图片

可以跨平台使用,Raspberry Pi树莓派
具备分布式计算能力
前端语言,对 python 支持最好
高级 API,Keras、TF-Learn、TF-Slim、TF-Layer

3.3.2 TensorFlow 简介

1)Tensor(张量)
零维的 Tensor 是标量,1维的是向量,2维以上的是矩阵

2)Flow(数据流)
去陌生的城市,不会当地的语言,最好的方式,画一张图告诉司机你的目的地

computational graph
Node:代表运算(圆圈)
edge:张量的数据流
【Programming】_第9张图片

3.3.3 TensorFlow 程序设计模式

核心是computational graph
分为:建立 computational graph 和 建立 Session 执行 computational graph

Session(会话)的作用是在客户端执行设备之间建立连接。有了这个连接,就可以将computational graph在各个不同的设备中执行,后续任何与设备之间的数据传输都必须通过Session来进行,并且最后获得执行后的结果。

tf.Variable() 构造函数需要变量的初始值,它可以是任何类型和形状的Tensor(张量)。 初始值定义变量的类型和形状。 施工后,变量的类型和形状是固定的。 该值可以使用其中一种赋值方式进行更改。

placeholder, 译为占位符,官方说法:”TensorFlow provides a placeholder operation that must be fed with data on execution.” 即必须在执行时feed值。
placeholder 实例通常用来为算法的实际输入值作占位符。例如,在MNIST例子中,定义输入和输出:

x = tf.placeholder(tf.float32, [None, 784])
#表示成员类型float32, [None, 784]是tensor的shape, None表示第一维是任意数量,784表示第二维是784维
y_ = tf.placeholder(tf.float32, [None, 10])

举个 y = s i g m o d ( W X + b ) y = sigmod(WX+b) y=sigmod(WX+b) 的例子

import tensorflow as tf
import numpy as np
W =tf.Variable(tf.random_normal([3,2]),name='w') #random_normal,从正态分布中输出随机值。
b =tf.Variable(tf.random_normal([3,2]),name='b')
X = tf.placeholder("float",[None,3],name='X')# placeholder,实例通常用来为算法的实际输入值作占位符
y = tf.nn.sigmoid(tf.matmul(X,W)+b,'y') #激活函数
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2,0.4],
                      [0.3,0.4,0.5],
                      [0.3,-0.4,0.5]])
    (_b,_W,_X,_y) = sess.run((b,W,X,y),feed_dict={X:X_array})

3.3.4 Keras 介绍

Keras是一个model-level的深度学习链接库,Keras必须配合backend engine 后端引擎(Theano、TensorFlow)进行计算(底层的Tensor计算)。

3.3.5 Keras 程序设计模式

蛋糕架+加蛋糕

1)蛋糕架

model = Sequential()
【Programming】_第10张图片

2)加蛋糕

  • add input and hidden layer in the model
  • add output layer in the model
【Programming】_第11张图片

3.3.6 Keras 与 TensorFlow 比较

【Programming】_第12张图片

3.4 在Windows / Linux Ubuntu 中安装TensorFlow 与 Keras

  • 服务器上配置Tensorflow GPU版

  • 本地远程访问Ubuntu16.04.3服务器上的Jupyter notebook

  • Ubuntu16.04.3服务器上opencv和caffe的配置

  • Jupyter更换主题和扩展包

  • 本地远程访问Ubuntu16.04.3服务器上的TensorBoard

  • Linux learning notes

3.5 Keras Demos(★★★★★)

莫烦 PYTHON 教学视频(MLP、CNN、RNN for MNIST classification,MLP、LSTM for regression)

  • 《Keras | 莫烦 》learning notes

Keras 建立 MLP、CNN 模型进行 MNIST 数据集手写数字分类

  • 【Keras-MLP】MNIST(只用 python 实现的 demo 可以参考 【python】Neural Network for MNIST classification)
  • 【Keras-CNN】MNIST

Keras 建立 MLP 模型预测泰坦尼克号上的生存概率

  • 【Keras-MLP】Taianic

Keras 建立 CNN 模型进行 CIFAR-10 数据集图像分类

  • 【Keras-CNN】CIFAR-10
  • 【Keras-LeNet】CIFAR-10
  • 【Keras-AlexNet】CIFAR-10
  • 【Keras-NIN】CIFAR-10
  • 【Keras-VGG】CIFAR-10
  • 【Keras-ResNet】CIFAR-10
  • 【Keras-DenseNet】CIFAR-10
  • 【Keras-Inception v1】CIFAR-10
  • 【Keras-Inception v2】CIFAR-10
  • 【Keras-Inception v3】CIFAR-10
  • 【Keras-Inception v4】CIFAR-10
  • 【Keras-Inception-resnet v1】CIFAR-10
  • 【Keras-Inception-resnet v2】CIFAR-10
  • 【Keras-MobileNet v1】CIFAR-10
  • 【Keras-Xception】CIFAR-10
  • 【Keras-SqueezeNet】CIFAR-10(上)
  • 【Keras-SqueezeNet】CIFAR-10(下)
  • 【Keras-ResNeXt】CIFAR-10

Keras 建立 MLP、RNN、LSTM模型进行 IMDb 情感分析

  • 【Keras-MLP】IMDb
  • 【Keras-RNN】IMDb
  • 【Keras-LSTM】IMDb

Keras 建立 GAN 模型进行图像的生成

  • 【Keras-MLP-GAN】MNIST
  • 【Keras-DCGAN】MNIST / CIFAR-10
  • 【Keras-CGAN】MNIST / CIFAR-10

3.6 TensorFlow Demos(★★★★★)

  • 《Tensorflow | 莫烦 》learning notes
  • 【TensorFlow】Programming model + 小试牛刀(仿真Neural Network )
  • 【TensorFlow-MLP】MNIST
  • 【TensorFlow-CNN】MNIST

附录 A: Use GPU to speed up training

测试下矩阵运算GPU与CPU的差别

A.1 导入tensorflow模块

import tensorflow as tf
import time

A.2 建立和执行计算图

默认用GPU跑
tf.reduce_sum 计算矩阵的和

#建立计算图
size=500
W = tf.random_normal([size, size],name='W') # 500,500
X = tf.random_normal([size, size],name='X') # 500,500
mul = tf.matmul(W, X,name='mul')
sum_result = tf.reduce_sum(mul,name='sum')# 矩阵内的值加总

# 执行计算图
with tf.Session() as sess:
    result = sess.run(sum_result)
print('result=',result)    

output

result= -10656.27

A.3 测试GPU与CPU性能的差别

def performanceTest(device_name,size):
    with tf.device(device_name):
        W = tf.random_normal([size, size],name='W')
        X = tf.random_normal([size, size],name='X')
        mul = tf.matmul(W, X,name='mul')
        sum_result = tf.reduce_sum(mul,name='sum')

    startTime = time.time() 
    # 使用 tf.ConfigProto 建立 session 的配置设置 tfconfig,传入参数 log_device_placement设置为True
    tfconfig=tf.ConfigProto(log_device_placement=True)
    with tf.Session(config=tfconfig) as sess:
        result = sess.run(sum_result)
    takeTimes=time.time()  - startTime   
    print(device_name," size=",size,"Time:",takeTimes )
    return takeTimes

调用

gpu_set=[];cpu_set=[];i_set=[]
for i in range(0,5001,500):
    g=performanceTest("/gpu:0",i) # 0号GPU
    c=performanceTest("/cpu:0",i)
    gpu_set.append(g);cpu_set.append(c);i_set.append(i)
    print("--")

output

/gpu:0  size= 0 Time: 0.14670062065124512
/cpu:0  size= 0 Time: 0.16228890419006348
--
/gpu:0  size= 500 Time: 0.16929364204406738
/cpu:0  size= 500 Time: 0.18462872505187988
--
/gpu:0  size= 1000 Time: 0.13805508613586426
/cpu:0  size= 1000 Time: 0.13151001930236816
--
/gpu:0  size= 1500 Time: 0.1536424160003662
/cpu:0  size= 1500 Time: 0.2314302921295166
--
/gpu:0  size= 2000 Time: 0.21573805809020996
/cpu:0  size= 2000 Time: 0.4350099563598633
--
/gpu:0  size= 2500 Time: 0.37288379669189453
/cpu:0  size= 2500 Time: 0.6350183486938477
--
/gpu:0  size= 3000 Time: 0.5283641815185547
/cpu:0  size= 3000 Time: 0.9774112701416016
--
/gpu:0  size= 3500 Time: 0.7861192226409912
/cpu:0  size= 3500 Time: 1.4520719051361084
--
/gpu:0  size= 4000 Time: 1.1301662921905518
/cpu:0  size= 4000 Time: 2.030012845993042
--
/gpu:0  size= 4500 Time: 1.5385856628417969
/cpu:0  size= 4500 Time: 2.7173430919647217
--
/gpu:0  size= 5000 Time: 2.0486159324645996
/cpu:0  size= 5000 Time: 3.6564781665802
--

GPU的RAM不够就把size设置小一些,可视化一下结果

%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.gcf()
fig.set_size_inches(6,4)
plt.plot(i_set, gpu_set, label = 'gpu')
plt.plot(i_set, cpu_set, label = 'cpu')
plt.legend()

output
【Programming】_第13张图片


参考
【1】TensorFlow中文社区
【2】tensorflow 生成随机数 tf.random_normal 和 tf.random_uniform 和 tf.truncated_normal 和 tf.random_shuffle
【3】TensorFlow函数——tf.variable( )
【4】tensorflow框架学习(一)placeholder 与variable
【5】 《TensorFlow+Keras深度学习人工智能实践应用》 林大贵


声明:第三章行文结构,拍摄图片均来源 《TensorFlow+Keras深度学习人工智能实践应用》 林大贵版,引用、转载请注明出处,如有兴趣,可以买一本看看,谢谢!

你可能感兴趣的:(Python,C,/,C++,TensroFlow,/,Keras)