GraphLab Create API(中文文档)-deeplearning

1. graphlab.deeplearning.create(dataset, target, features= None, network_type='auto')

NeuralNet对象由deeplearning.create()得到,返回的网络可以被graphlab.neuralnet_classifier.create()用来训练NeuralNetClassifier。

一般工作流程分为三步:

  1. 使用graphlab.deeplearning.create()创建神经网络;
  2. 调整神经网络参数,让其适用于目标任务;
  3. 用给定的网络架构和超参数,通过graphlab.neuralnet_classifier.create()产生的网络训练NeuralNetClassifier。

当数据包含图像列额,返回一个ConvolutionNet,否则返回一个MultiLayerPerceptrons

参数:
dataset: SFrame 要为其创建神经网络的数据库
target: str 预测目标列名称
features: list[str] (可选) 使用features的列名训练模型。每列必须包含floats向量或者有一列是Image类型。默认为None(使用除了target列的全部列)
network_type: str, {‘auto’, ‘perceptrons’, ‘convolution’} (可选)确定创建的网络类型。默认自动为给图片输入创建ConvolutionNet,给常规的数值输入创建MultiLayerPerceptrons

返回:NeuralNet

注意:返回的神经网络可能是此优的,用作训练的初始开始点

例子:
这里写图片描述

https://turi.com/products/create/docs/generated/graphlab.deeplearning.create.html#graphlab.deeplearning.create


2. graphlab.neuralnet_classifier.create(dataset, target, features=None, max_iterations=10, network=None, validation_set='auto', verbose=True, class_weights=None, **kwargs)
创建一个NeuralNetClassifier,用数字特征或者图像数据特征预测数据的类。
可选参数network接受一个NeuralNet对象,这个NeuralNet对象定义神经网络构架和学习参数。在模型学习过程中,这是最重要的参数。推荐开始时使用deeplearning.create()返回的默认构架,然后调整构架,使其最适于你的目标任务。
多GPU支持
神经网络分类器的创建利用多GPU设备的优势。默认的,它使用能够发现的所有GPU。你可以通过设置运行时间配置“GRAPHLAB_NEURALNET_DEFAULT_GPU_DEVICE_ID”改变默认行为。比如:下面的代码将默认改为只使用0和2两台设备

graphlab.set_runtime_config("GRAPHLAB_NEURALNET_DEFAULT_GPU_DEVICE_ID", "0,2")

注意:
如果GPU之间存在不平衡,也就是其中有一个GPU比其他的慢,那么更快一点的GPU最终会等待较慢的GPU

参数:

  • dataset: SFrame
    一个训练数据集,包含特征列和目标列。如果特征列类型为graphlab.Image,那么所有的图片必须是相同的尺寸。
  • target: str
    dataset中列名为预测目标。这列中的值代表类别,必须是整数或者字符串。
  • features:list[str](可选)
    特征列名常用来训练模型。每列必须包含floats向量或者有一列为Image类型。默认为None,表示所有的列都被使用(除了target列)。
  • max_iterations:int(可选)
    最大迭代次数
  • network:NeuralNet(可选)
    NeuralNet对象包含模型学习参数和对网络构架的定义。默认为None,但是推荐使用deeplearning.create()给输入数据找到一个默认结构,但是这个默认的结构不是最优的,所以强烈建议调整NeuralNet。
  • validation_set:SFrame(可选)
    用于监视模型泛化性能的数据集。对于进度表的每一行,为所提供的训练数据集和validation_set计算所选择的度量。这个SFrame的格式必须与训练数据集相同。这个参数默认设置为‘auto’,自动地对验证集采样并用于进程打印。如果validation_set被设置为None,那么不会计算其他度量。每次完全迭代只计算一次,默认值为‘auto’。
  • class_weights:{dict,‘auto’}(可选)
    根据给定的类权重给训练数据样例加权重。如果设置为None,所有类会平均权重。‘auto’模式设置类权重为与训练数据中给定类别的数字样例成反比例。如果提供自定义类权重,那么所有的类都必须出现在字典中。
  • kwargs:dict(可选)
    训练神经网络的另一个参数。下列所有的参数都可以存储在一个神经网络对象的params属性中。如果在两个地方设置了相同的参数,那么在创建函数中的参数将重写在神经网络对象中的参数。
    • batch_size:int 默认为100
      SGD迷你批量尺寸。更大的batch_size会提升每次迭代的速度,但是会耗费更多GPU或CPU内存。
    • model_checkpoint_path:str 默认“”
      如果被指定,则每n次迭代保存模型到给定的路径,n由model_checkpoint_interval指定。
    • model_checkpoint_interval:int 默认为5
      如果model_checkpoint_path被指定,每n次迭代保存模型到给定的路径。
    • mean_image:graphlab.image.Image 默认为None
      如果设置该参数并且subtract_mean为True,则用给定的图像来节省计算时间。
    • metric: {‘accuracy’, ‘error’, ‘recall@5’, …} 默认为auto
      metric用来评估训练数据和验证数据。为了在多种标准上进行评估,提供一列评估字符串,例如{‘accuracy’,‘recall@5’},或者用一个逗号分隔开,例如‘accuracy,recall@5’。
    • subtract_mean:bool 默认为True
      如果为True,则每张图像减掉平均值。计算训练数据计算平均值图像或者用给定的mean_image计算。减掉平均值集中输入数据有助于加速神经网络训练。
    • random_crop:bool 默认False
      如果为True,对输入图像随机剪裁。被剪裁的图片尺寸由input_shap参数定义。随机剪裁通过扩张数据库防止模型过拟合。
    • input_shape:str 默认为None
      以通道,宽度,高度为格式的字符串,例如:“1,28,28”或者“3,256,256”,表明随机剪裁后的图像形状。input_shape不能超出原始图片尺寸大小。
    • random_mirror:bool 默认为False
      如果为True,将随机镜像应用到输入图像上。随机镜像通过扩张数据库防止模型过拟合。
    • learning_rate:float 默认为0.001
      偏置和权重的学习率。
    • momentum: float (0~1之间)默认为0.9
      偏置和权重的动量。
    • l2_regularization:float 默认为0.0005
      权重的L2正则化。
    • bias_learning_rate:float 默认为不使用
      指定偏置的学习率,重写learning_rate。
    • bias_momentum:float 默认为不使用
      指定偏置的动量,重写momentum。
    • bias_l2_regularization:float 默认为0.0
      偏置的L2正则化。
    • learning_rate_schedule: {‘constant’, ‘exponential_decay’, ‘polynomial_decay’}
      学习率调度算法。
      constant:对于所有的迭代使用相同的学习率。
      exponential_decay:每次迭代指数降低学习率。详情参阅注释部分。
    • learning_rate_start_epoch:int 默认为0
      开始学习率调度。
    • min_learning_rate:float 默认为0.00001
      学习率最小值。
    • learning_rate_step:int 默认为1
      每learning_rate_step数量个特定时间上传学习率。
    • learning_rate_gamma:float 默认为0.1
      exponential_decay中使用的学习衰变参数。
    • learning_rate_alpha:float 默认为0.5
      polynomial_decay中使用的学习衰变参数。
    • init_random:{‘gaussian’|‘xavier’} 默认为‘gaussian’
      权重的初始类型。使用随机高斯初始化或者泽维尔初始化。更多信息见FullConnectionLayer参数。
    • init_sigma:float 默认为0.01
      高斯分布权重初始化的标准偏差来源。
    • init_bias:float 默认为0.0
      偏置的初始值。
    • divideby:float 默认为1.0
      在输入数据插入网络之前缩放的值。
      **输出:**NeuralNetClassifier

注释:
对于exponential_decay,学习率按下式指数降低:
这里写图片描述
对于polynomial_decay,学习率按下式多项式降低:
这里写图片描述

参考:
LeCun,Yann等. Gradient-based learning applied to document recognition
The MNIST database

例子:
我们用MNIST数据训练一个数字识别的卷积神经网络。数据已经从MNIST数据库中下载,并且在Turi’s public S3 bucket中保存为SFrame。

>>> data = graphlab.SFrame('https://static.turi.com/datasets/mnist/sframe/train')
>>> test_data = graphlab.SFrame('https://static.turi.com/datasets/mnist/sframe/test')
>>> training_data, validation_data = data.random_split(0.8)

将所有的图片剪裁成相同尺寸,因为神经网络有固定的输入尺寸。

>>> training_data['image'] = graphlab.image_analysis.resize(training_data['image'], 28, 28, 1, decode=True)
>>> validation_data['image'] = graphlab.image_analysis.resize(validation_data['image'], 28, 28, 1, decode=True)
>>> test_data['image'] = graphlab.image_analysis.resize(test_data['image'], 28, 28, 1, decode=True)

使用MNIST内置的神经网络构架(一个一层的卷积神经网络):

>>> net = graphlab.deeplearning.get_builtin_neuralnet('mnist')

神经网络的层:

>>> net.layers
layer[0]: ConvolutionLayer
  padding = 1
  stride = 2
  random_type = xavier
  num_channels = 32
  kernel_size = 3
layer[1]: MaxPoolingLayer
  stride = 2
  kernel_size = 3
layer[2]: FlattenLayer
layer[3]: DropoutLayer
  threshold = 0.5
layer[4]: FullConnectionLayer
  init_sigma = 0.01
  num_hidden_units = 100
layer[5]: SigmoidLayer
layer[6]: FullConnectionLayer
  init_sigma = 0.01
  num_hidden_units = 10
layer[7]: SoftmaxLayer

神经网络的参数:

>>> net.params
{'batch_size': 100,
 'data_shape': '1,28,28',
 'divideby': 255,
 'init_random': 'gaussian',
 'l2_regularization': 0.0,
 'learning_rate': 0.1,
 'momentum': 0.9}

使用特定的网络训练一个NeuralNetClassifier(神经网络分类器)

>>> m = graphlab.neuralnet_classifier.create(training_data,
                           target='label',                     
                           network = net,
                           validation_set=validation_data, 
                           metric=['accuracy', 'recall@2'],
                           max_iterations=3)

分类测试数据,输出最可能的类标签。‘probablity’对应输入属于此类的可能性:

>>> pred = m.classify(test_data)
>>> pred
+--------+-------+----------------+
| row_id | class |  probability   |
+--------+-------+----------------+
|   0    |   0   | 0.998417854309 |
|   1    |   0   | 0.999230742455 |
|   2    |   0   | 0.999326109886 |
|   3    |   0   | 0.997855246067 |
|   4    |   0   | 0.997171103954 |
|   5    |   0   | 0.996235311031 |
|   6    |   0   | 0.999143242836 |
|   7    |   0   | 0.999519705772 |
|   8    |   0   | 0.999182283878 |
|   9    |   0   | 0.999905228615 |
|  ...   |  ...  |      ...       |
+--------+-------+----------------+
[10000 rows x 3 columns]

输出两个最可能的数字:

>>> pred_top2 = m.predict_topk(test_data, k=2)
>>> pred_top2
+--------+-------+-------------------+
| row_id | class |    probability    |
+--------+-------+-------------------+
|   0    |   0   |   0.998417854309  |
|   0    |   6   | 0.000686840794515 |
|   1    |   0   |   0.999230742455  |
|   1    |   2   | 0.000284609268419 |
|   2    |   0   |   0.999326109886  |
|   2    |   8   | 0.000261707202299 |
|   3    |   0   |   0.997855246067  |
|   3    |   8   |  0.00118813838344 |
|   4    |   0   |   0.997171103954  |
|   4    |   6   |  0.00115600414574 |
|  ...   |  ...  |        ...        |
+--------+-------+-------------------+
[20000 rows x 3 columns]

在测试数据上评估分类器,默认指标是accuracy(精确度)和confusion_matrix(混淆矩阵)。

>>> eval_ = m.evaluate(test_data)
>>> eval_
{'accuracy': 0.979200005531311, 'confusion_matrix':
 +--------------+-----------------+-------+
 | target_label | predicted_label | count |
 +--------------+-----------------+-------+
 |      0       |        0        |  969  |
 |      2       |        0        |   2   |
 |      5       |        0        |   2   |
 |      6       |        0        |   9   |
 |      7       |        0        |   1   |
 |      9       |        0        |   2   |
 |      1       |        1        |  1126 |
 |      2       |        1        |   2   |
 |      6       |        1        |   2   |
 |      7       |        1        |   3   |
 |     ...      |       ...       |  ...  |
 +--------------+-----------------+-------+
 [64 rows x 3 columns]}
Next  Previous

英文原文见链接(新手上路,可能存在不少错误,还请各位大神不吝赐教)

https://turi.com/products/create/docs/generated/graphlab.neuralnet_classifier.create.html#graphlab.neuralnet_classifier.create

你可能感兴趣的:(机器学习,卷积神经网络)