@llplmlyd
        
        2019-03-29T06:32:50.000000Z
        字数 3220
        阅读 1024
    Python
Docker下安装TensorFlow 
Tensorflow 是Google的一个开源机器学习框架,中国大陆的用户在使用的时候往往需要爬过GFW墙,借助VPN,但是成功率还是很低,或者即使连接上了,速度也很慢。 
使用docker hub中提供的镜像库,基本会成功安装Tensorflow。 
Winodws下cmd中运行以下命令进行安装:
docker run -it -p 8888:8888 tensorflow/tensorflow
TensorFlow使用 
使用TensorFlow之前,首先导入它:
import tensorflow as tf
我们通过操作符号变量来描述这些可交互的操作单元,可以用下面的方式创建一个:
x = tf.placeholder("float", [None, 784])
x不是一个特定的值,而是一个占位符 placeholder,我们在TensorFlow运行计算时输入这个值。我们希望能够输入任意数量的MNIST图像,每一张图展平成784维的向量。我们用2维的浮点数张量来表示这些图,这个张量的形状是[None,784]。(这里的None表示此张量的第一个维度可以是任何长度的。)
Variable 代表一个可修改的张量,存在在TensorFlow的用于描述交互性操作的图中。它们可以用于计算输入值,也可以在计算中被修改。对于各种机器学习应用,一般都会有模型参数,可以用Variable表示。
用全为零的张量来初始化W和b。因为我们要学习W和b的值,它们的初值可以随意设置。
实现模型:y = tf.nn.softmax(tf.matmul(x,W) + b)
如何制作机器学习的数据集
搭建 TensorFlow 的流程基本如下 
 1. 导入数据集 :数据集处理 
 2. 导入TensorFlow模块 :模块库 
 3. Create the model :占位符 
 4. Define loss and optimizer :优化因子 
 5. Train :参数初始化,迭代训练 
 6. Test trained model:
图像处理 
1、openCV 
在读取图像之前,你得把你的做实验的图像事先放到工作目录下才行。读取函数是cv2.imread(),关于函数说明: cv2.imread(‘图像名称’,’可选参数’)  
可选参数决定读入图像的模式:  
0:读入的为灰度图像(即使图像为彩色的)  
1:读入的图像为彩色的(默认);  
注意的是:即使图像在工作空间不存在,这个函数也不会报错,只不过读入的结果为none。
import cv2img = cv2.imread(‘flower.jpg’)
[Python下opencv使用笔记(一)(图像简单读取、显示与储存)][1] 
 [OpenCV中文教程][2]
TensorFlow使用 
变量的声明函数 tf. Variable 
tf.random_ normal([2, 3], stddev = 2 )会产生一个2*3的矩阵,矩阵中的元素是均值为0 ,标准差为2 的随机数。均值可以用mean来指定 
TensorFlow 中矩阵乘法是非常容易实现的。以下TensorFlow 程序实现神经网络的前向传播过程。
a = tf .matmul (x, wl)y = tf .matmul (a, w2)
其中tf.matmul 实现了矩阵乘法的功能。 
一些其他的随机数生成器
tf.random_normal 正态分布tf.random_uniform 均匀分布tf.random_gamma gamma分布tf.truncated_normal 正态分布 但如果随机出来的值偏离平均值超过2,那么这个数将会被重新随机
常数生成函数:
tf.zeros 产生全零的数组tf.ones 产生全1的数组tf.fill 产生一个全部为给定数字的数组tf.constant 产生一个给定的常量eg: biases= tf . Variable(tf . zeros([3))) biases 偏置项
TensorFlow 也支持通过其他变量的初始值来初始化新的变量
w2 = tf. Variable (weights. initialized_value ())w3 = tf.Variable(weights.initialized_value() * 2 . 0)
以上代码中, w2 的初始值被设置成了与weights 变量相同。w3 的初始值则是weights 
初始值的两倍。在TensorFlow 中, 一个变量的值在被使用之前,这个变量的初始化过程需要 
被明确地调用。
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 
有六个参数,其中前面的四个比较主要。
input:输入图片,格式为[batch,长,宽,通道数],长和宽比较好理解 batch就是一批训练数据有多少张照片。
filter:就是卷积核,其格式为[长,宽,输入通道数,输出通道数],其中长和宽指的是本次卷积计算的“抹布”的规格,输入通道数应当和input的通道数一致,输出通道数可以随意指定。
strides: 是步长,一般情况下的格式为[1,长上步长,宽上步长,1],官方规定前后为1,所谓步长就是指抹布(卷积核)每次在长和宽上滑动多少会停下来计算一次卷积。这个步长不一定要能够被输入图片的长和宽整除。
padding:是卷积核(抹布)在边缘处的处理方法,即填充,如果边缘数据不可丢弃,可通过选择same 方法进行卷积。
tf.truncated_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
函数参数: 
shape:一维整数张量或 Python 数组,输出张量的形状. 
mean:dtype 类型的 0-D 张量或 Python 值,截断正态分布的均值. 
stddev:dtype 类型的 0-D 张量或 Python 值,截断前正态分布的标准偏差. 
dtype:输出的类型. 
seed:一个 Python 整数.用于为分发创建随机种子.查看tf.set_random_seed行为. 
name:操作的名称(可选). 
函数返回值: 
tf.truncated_normal函数返回指定形状的张量填充随机截断的正常值.
tf.nn.max_pool(value,ksize,strides,padding,data_format='NHWC',name=None)
value:需要池化的输入,一般池化层接在卷积层后面,与tf.nn.conv2d()的第一个参数相同 
依然是 [batch, height, width, channels] 这样的shape 
ksize:池化窗口的大小,取一个四维向量,4个整数的列表或元组。输入张量的每个维度的窗口大小。一般是 [1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1。 
strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1] 
padding:和卷积类似,可以取  'VALID' 或者  'SAME' 。
def dropout(x, keep_prob, noise_shape=None, seed=None, name=None)# x,你自己的训练、测试数据等# keep_prob,dropout概率
矩阵 a 乘以矩阵 b,生成a * b
picture 卷积 →feature map  
卷积  作用用它来进行特征提取 
池化  对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征
图片尺寸减小到7x7,我们加入一个有1024个神经元的全连接层