@llplmlyd
2019-03-29T14:32:50.000000Z
字数 3220
阅读 768
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 cv2
img = 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个神经元的全连接层