1. graphlab.deeplearning.create(dataset, target, features= None, network_type='auto')
NeuralNet对象由deeplearning.create()得到,返回的网络可以被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
参数:
注释:
对于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