新人求教gpu的使用和keras 多gpu调用

这样的代码能用GPU来加速计算吗?
[问题点数:30分,结帖人new_new_man]
这样的代码能用GPU来加速计算吗?
[问题点数:30分,结帖人new_new_man]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年2月 移动平台大版内专家分月排行榜第三
匿名用户不能发表回复!|沙龙活动 | 3月31日 京东、微博实战专家与你共同探讨容器技术实践!
在R和Python之间如何进行选择一直是一个热议的话题。机器学习世界也被不同语言偏好所划分。但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度学习的资源库和框架。
我个人从R转到Python是因为我想更加深入机器学习的领域,而仅仅使用R的话,这(在之前)是几乎不可能实现的事情。不过也仅此而已!
随着Keras在R中的实现,语言选择的斗争又重新回到舞台中央。Python几乎已经慢慢变成深度学习建模的默认语言,但是随着在R中以TensorFlow(CPU和GPU均兼容)为后端的Keras框架的发行,
即便是在深度学习领域,R与Python抢占舞台的战争也再一次打响。
下面我们将会看到怎样在R中安装以TensorFlow为基础的Keras框架,然后在RStudio中构建我们基于经典MNIST数据集的第一个神经网络模型。
内容列表:
以TensorFlow为后端的Keras框架安装
在R中可以使用Keras来构建模型的不同类型
在R中使用MLP将MNIST手写数字进行归类
将MNIST结果与Python中同等代码结果进行比较
一、以TensorFlow为后端的Keras框架安装
在RStudio中安装Keras的步骤非常简单。只要跟着以下步骤,你就可以在R中构建你的第一个神经网络模型。
install.packages("devtools")
devtools::install_github("rstudio/keras")
以上步骤会从Github资源库下载Keras。现在是时候把keras加载进R,然后安装TensorFlow。
library(keras)
在默认情况下,RStudio会加载CPU版本的TensorFlow。如果没有成功加载CPU版本的TensorFlow, 使用以下指令来下载。
install_tensorflow()
如要为单独用户或桌面系统安装GPU支持的TensorFlow,使用以下指令。
install_tensorflow(gpu=TRUE)
为多重用户安装,请参考这个指南:https://tensorflow.rstudio.com/installation_gpu.html。
现在在我们的RStudio里,keras和TensorFlow都安装完毕了。让我们开始构建第一个在R中的神经网络来处理MNIST数据集吧。
二、在R中可以使用keras来构建模型的不同类型
以下是可以在R中使用Keras构建的模型列表
多层感知器(Multi-Layer Perceptrons)
卷积神经网络(Convoluted Neural Networks)
递归神经网络(Recurrent Neural Networks)
Skip-Gram模型
使用预训练的模型(比如VGG16、RESNET等)
微调预训练的模型
让我们从构建仅有一个隐藏层的简单MLP模型开始,来试着对手写数字进行归类。
三、在R中使用MLP将MNIST手写数字进行归类
#loading keras library
library(keras)
#loading the keras inbuilt mnist dataset
data&-dataset_mnist()
#separating train and test file
train_x&-data$train$x
train_y&-data$train$y
test_x&-data$test$x
test_y&-data$test$y
# converting a 2D array into a 1D array for feeding into the MLP and normalising the matrix
train_x &- array(train_x, dim = c(dim(train_x)[1], prod(dim(train_x)[-1]))) / 255
test_x &- array(test_x, dim = c(dim(test_x)[1], prod(dim(test_x)[-1]))) / 255
#converting the target variable to once hot encoded vectors using keras inbuilt function
train_y&-to_categorical(train_y,10)
test_y&-to_categorical(test_y,10)
#defining a keras sequential model
model &- keras_model_sequential()
#defining the model with 1 input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer[10 neurons]
#i.e number of digits from 0 to 9
layer_dense(units = 784, input_shape = 784) %&%
layer_dropout(rate=0.4)%&%
layer_activation(activation = 'relu') %&%
layer_dense(units = 10) %&%
layer_activation(activation = 'softmax')
#compiling the defined model with metric = accuracy and optimiser as adam.
model %&% compile(
loss = 'categorical_crossentropy',
optimizer = 'adam',
metrics = c('accuracy')
#fitting the model on the training dataset
model %&% fit(train_x, train_y, epochs = 100, batch_size = 128)
#Evaluating model on the cross validation dataset
loss_and_metrics &- model %&% evaluate(test_x, test_y, batch_size = 128)
以上的代码获得了99.14%的训练精度和96.89%的验证精度。在我的i5处理器上跑这段代码完整训练一次用时13.5秒,而在TITANx
GPU上,验证精度可以达到98.44%,训练一次平均用时2秒。
四、使用keras来构建MLP模型——R Vs. Python
为了更好地比较,我同样使用Python来实现解决以上的MINIST归类问题。结果不应当有任何差别,因为R会创建一个进程(conda
instance)并在其中运行keras。但你仍然可以尝试以下同等的Python代码。
#importing the required libraries for the MLP model
import keras
from keras.models import Sequential
import numpy as np
#loading the MNIST dataset from keras
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#reshaping the x_train, y_train, x_test and y_test to conform to MLP input and output dimensions
x_train=np.reshape(x_train,(x_train.shape[0],-1))/255
x_test=np.reshape(x_test,(x_test.shape[0],-1))/255
import pandas as pd
y_train=pd.get_dummies(y_train)
y_test=pd.get_dummies(y_test)
#performing one-hot encoding on target variables for train and test
y_train=np.array(y_train)
y_test=np.array(y_test)
#defining model with one input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer [10 #neurons]
model=Sequential()
from keras.layers import Dense
model.add(Dense(784, input_dim=784, activation='relu'))
keras.layers.core.Dropout(rate=0.4)
model.add(Dense(10,input_dim=784,activation='softmax'))
# compiling model using adam optimiser and accuracy as metric
model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy'])
# fitting model and performing validation
model.fit(x_train,y_train,epochs=50,batch_size=128,validation_data=(x_test,y_test))
以上模型在同样的GPU上达到了98.42%的验证精度。所以,就像我们在一开始猜测的那样,结果是相同的。
如果这是你用R构建的第一个深度学习模型,我希望你很享受这个过程。使用很简单的代码,你就可以对手写数值进行精确度达到98%的分类。这应该可以给你足够的动力让你在机器学习的领域探索。
如果你已经在Python中使用过keras深度学习框架,那么你会发现R中keras框架的句式和结构跟其在Python中非常相似。事实上,R中的keras安装包创造了一个conda环境而且安装了在该环境下运行keras所需要的所有东西。但是,更让我兴奋的是:看到现在数据科学家们使用R构建有关现实生活的深度学习模型。就像有句话说的一样,竞争永不停歇。
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至: 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
沙龙活动 | 3月31日 京东、微博实战专家与你共同探讨容器技术实践!
本文比较了 Keras 支持的主流深度学习框架性keras(Ubuntu14.04,python2.7)安装及用keras从本地中读取图片_Linux系统教程_红联Linux门户
当前位置: >
keras(Ubuntu14.04,python2.7)安装及用keras从本地中读取图片
第一部分:安装
由于我的电脑之前已经已经配置好了caffe,因此有关python的一切相关包都已经安装完成。因此,即使不用Anaconda安装依然很简单。
sudo pip install tensorflow
sudo pip install keras
from keras.models import Sequential
第二部分:如何用keras从本地中读取图片,并做一个二分类的神经网络,直接贴出代码:
# coding=utf-8
import os & ##和文件目录相关的都用到该模块&&& &
from PIL import Image &##python imaging library&&&&
import numpy as np
#导入各种用到的模块组件
#from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.advanced_activations import PReLU
from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras.optimizers import SGD, Adadelta, Adagrad
from keras.utils import np_utils, generic_utils
def __getnum__(path): & & & & ##统计样本数目的函数
fm=os.listdir(path)
for f in fm: & & & & & ##对于在fm中的文件
return i & & &
def load_data(path,count): & & ##数据转换函数
data = np.empty((count,100,100,3),dtype=&float32&) &&
label = np.empty((count,),dtype=&int&)&
imgs = os.listdir(path) &
num = len(imgs)&
for i in range(num): &
img = Image.open(path+imgs[i]) &
arr = np.asarray(img,dtype=&float32&)
data[i,:,:,:] = arr & &&
if i&num/2: & & & & & & ##前一半label为0,后一部分数据label为1
label[i] = int(0) &
label[i] = int(1)&
return data,label
###############
#开始建立CNN模型
###############
#生成一个model
def __CNN__(testdata,testlabel,traindata,trainlabel):
model = Sequential()
#第一个卷积层,4个卷积核,每个卷积核大小5*5。1表示输入的图片的通道,灰度图为1通道。
model.add(Convolution2D(20 , 5 , 5, border_mode='valid',input_shape=(100,100,3)))&
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(MaxPooling2D(pool_size=(2, 2)))
#第二个卷积层,30个卷积核,每个卷积核大小5*5。
#采用maxpooling,poolsize为(2,2)
model.add(Convolution2D(20 , 3 , 3, border_mode='valid'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
#第三个卷积层,16个卷积核,每个卷积核大小3*3
#激活函数用tanh
#采用maxpooling,poolsize为(2,2)
model.add(Convolution2D(16 , 3 , 3, border_mode='valid'))&
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, init='normal'))
model.add(Activation('relu'))
#Softmax分类,输出是4类别
model.add(Dense(2, init='normal'))
model.add(Activation('softmax'))
####训练模型
#使用SGD + momentum冲量
sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd,metrics=['accuracy'])
#开始训练, show_accuracy在每次迭代后显示正确率 。 &batch_size是每次带入训练的样本数目, nb_epoch 是迭代次数, &shuffle 是打乱样本随机。 &
model.fit(traindata, trainlabel, batch_size=20,epochs=100)
#设置测试评估参数,用测试集样本
model.evaluate(testdata, testlabel, batch_size=20)
############
############
trainpath = '/home/lyyang/keras/data/train/'
testpath = '/home/lyyang/keras/data/test/'
testcount=__getnum__(testpath)
traincount=__getnum__(trainpath)
#print testcount
#print traincount
testdata,testlabel= load_data(testpath,testcount)
traindata,trainlabel= load_data(trainpath,traincount)
#print testlabel.shape
#print testlabel
#print trainlabel.shape
#print trainlabel
#label为0~1共2个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数
testlabel = np_utils.to_categorical(testlabel, 2) & & &
trainlabel = np_utils.to_categorical(trainlabel, 2)
__CNN__(testdata, testlabel, traindata, trainlabel)
使用猫狗数据进行分类,数据可以在kaggle网站上下载。
运行的话:
python & ***.py&
不过,我没有配置python 的 IDE,感觉写大的project还是不太方便。
本文永久更新地址:
网站推荐文章后使用快捷导航没有帐号?
Keras.js可以让你使用浏览器在GPU上运行Keras模型
查看: 27434|
评论: 0|来自: 机器之心
摘要: 项目可以让你使用 WebGL 在 GPU 驱动的、你的浏览器上运行训练好的 Keras 模型。模型直接根据 Keras JSON 格式配置文件和关联的 HDF5 权重而序列化(serialized)。项目地址:https://github.com/transcranial/keras ...
项目可以让你使用 WebGL 在 GPU 驱动的、你的浏览器上运行训练好的 Keras 模型。模型直接根据 Keras JSON 格式配置文件和关联的 HDF5 权重而序列化(serialized)。项目地址:https://github.com/transcranial/keras-js互动演示用于 MNIST 的基本卷积网络在 MNIST 上训练的卷积变自编码器(Convolutional Variational Autoencoder)在 ImageNet 上训练的 50 层的残差网络(Residual Network)在 ImageNet 上训练的 Inception V3用于 IMDB 情绪分类的双向 LSTM为什么要做这个项目?消除对后端基础设施或 API 调用的需求完全将计算卸载到客户端浏览器互动应用程序使用方法查看 demos/src/ 获取真实案例的源代码。1. 对 Model 和 Sequential 都适用model = Sequential()model.add(...)......model = Model(input=..., output=...)一旦训练完成,保存权重和导出模型架构配置:model.save_weights('model.hdf5')with open('model.json', 'w') as f:f.write(model.to_json())参见演示的 jupyter notebooks 了解详情:demos/notebooks/2. 在 HDF5 权重文件上运行编码器脚本:$ python encoder.py /path/to/model.hdf5这将在同一个文件夹中产生两个用作 HDF5 权重的文件:model_weights.buf 和 model_metadata.json3.Keras.js 所需的三个文件:模型文件:model.json权重文件:model_weights.buf权重元数据文件:model_metadata.json4.GPU 支持由 weblas(https://github.com/waylonflinn/weblas) 驱动。将 Keras.js 和 Weblas 库包含进去:&script src="lib/weblas.js"&&/script&&script src="dist/keras.js"&&/script&5. 创建新模型实例化时,数据通过 XHR(相同域或要求 CORS)加载,层被初始化为有向无环图。当这些步骤完成之后,类方法 ready() 返回一个解决问题的 Promise。然后,使用 perdict() 让数据通过模型,这也会返回一个 Promise。const model = new KerasJS.Model({filepaths: {model: 'url/path/to/model.json',weights: 'url/path/to/model_weights.buf',metadata: 'url/path/to/model_metadata.json'}gpu: true})model.ready().then(() =& {// input data object keyed by names of the input layers// or `input` for Sequential models// values are the flattened Float32Array data// (input tensor shapes are specified in the model config)const inputData = {'input_1': new Float32Array(data)}// make predictions// outputData is an object keyed by names of the output layers// or `output` for Sequential modelsmodel.predict(inputData).then(outputData =& {// e.g.,// outputData['fc1000']})})可用的层高级激活: LeakyReLU, PReLU, ELU, ParametricSoftplus, ThresholdedReLU, SReLU卷积: Convolution1D, Convolution2D, AtrousConvolution2D, SeparableConvolution2D, Deconvolution2D, Convolution3D, UpSampling1D, UpSampling2D, UpSampling3D, ZeroPadding1D, ZeroPadding2D, ZeroPadding3D内核: Dense, Activation, Dropout, SpatialDropout2D, SpatialDropout3D, Flatten, Reshape, Permute, RepeatVector, Merge, Highway, MaxoutDense嵌入: Embedding归一化: BatchNormalization池化: MaxPooling1D, MaxPooling2D, MaxPooling3D, AveragePooling1D, AveragePooling2D, AveragePooling3D, GlobalMaxPooling1D, GlobalAveragePooling1D, GlobalMaxPooling2D, GlobalAveragePooling2D循环: SimpleRNN, LSTM, GRU包装器: Bidirectional, TimeDistributed还没有实现的层目前还不能直接实现 Lambda,但最终会创建一个通过 Script 定义计算逻辑的机制。内核: Lambda卷积: Cropping1D, Cropping2D, Cropping3D本地连接: LocallyConnected1D, LocallyConnected2D噪声:GaussianNoise, GaussianDropout备注WebWorker 及其限制Keras.js 可以与主线程分开单独运行在 WebWorker 中。因为 Keras.js 会执行大量同步计算,这可以防止该 UI 受到影响。但是,WebWorker 的较大限制之一是缺乏 &canvas& 访问(所以要用 WebGL)。所以在单独的线程中运行 Keras.js 的好处被必须运行在 CPU 模式中的要求抵消了。换句话说,在 GPU 模式中运行的 Keras.js 只能运行在主线程上。WebGL MAX_TEXTURE_SIZE在 GPU 模式中,张量对象被编码成了计算之前的 WebGL textures。这些张量的大小由 gl.getParameter(gl.MAX_TEXTURE_SIZE) 限定,这会根据硬件或平台的状况而有所不同。参考 http://webglstats.com/ 了解典型的预期值。在 im2col 之后,卷积层中可能会有一个问题。比如在 Inception V3 网络演示中,第一层卷积层中 im2col 创造了一个 22201 x 27 的矩阵,并在第二层和第三层卷积层中创造 21609 x 288 的矩阵。第一个维度上的大小超过了 MAX_TEXTURE_SIZE 的较大值 16384,所以必须被分割开。根据权重为每一个分割开的张量执行矩阵乘法,然后再组合起来。在这个案例中,当 createWeblasTensor() 被调用时,Tensor 对象上会提供一个 weblasTensorsSplit 属性。了解其使用的例子可查看 src/layers/convolutional/Convolution2D.js开发/测试对于每一个实现的层都存在广泛的测试。查看 notebooks/ 获取为所有这些测试生成数据的 jupyter notebooks。$ npm install要运行所有测试,执行 npm run server 并访问 http://localhost:3000/test/。所有的测试都会自动运行。打开你的浏览器的开发工具获取额外的测试数据信息。对于开发,请运行:$ npm run watch编辑 src/ 中的任意文件都会触发 webpack 来更新 dist/keras.js。要创建生产型的 UMD webpack 版本,输出到 dist/keras.js,运行:$ npm run build证书MIT:https://github.com/transcranial/keras-js/blob/master/LICENSE欢迎加入本站公开兴趣群商业智能与数据分析群兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识QQ群:
上一篇:下一篇:
dataguru.cn All Right Reserved.常见问题与解答 - Keras中文文档

我要回帖

更多关于 keras gpu 配置 的文章

 

随机推荐