Tefla:用tensorflow进行深度学习
Tefla是在tensorflow之上开发的高级API,以便在云/数据中心上更快地建模和部署模型。它还包含最先进的分类,segmentation,generative 和半监督学习模型。除此之外,Tefla还采用了最先进的图像处理,文本处理算法。
现有深度学习引擎的一个重大改进是Tefla使每个人都可以更快地开发深度学习应用程序。它采用模块化设计,可以无缝集成新模块。
Tefla可以处理图像,文本,视频和体积数据。它还可以用于开发游戏环境的强化学习算法。
安装:
pip install tefla
源代码安装:有关更详细的说明,请访问https://github.com/openAGI/tefla
git clone https://github.com/openagi/tefla.git
cd tefla
pip install -r requirements.txt
export PYTHONPATH=.
让我们为IMDB数据集开发一个模型,使用Tefla将电影评论分类为正面和负面类。
1.准备并加载数据集:
使用以下脚本来处理和加载数据集
https://github.com/openAGI/models/blob/master/datasets/imdb.py
import imdb
train, test, _ = imdb.load_data(path='imdb.pkl', n_words=10000, valid_portion=0.1)
需要处理数据集,因为它具有可变长度序列,我们需要使用padding,Python代码如下:
trainX, trainY = train
testX, testY = test
trainX = pad_sequences(trainX, maxlen=100, value=0.)
testX = pad_sequences(testX, maxlen=100, value=0.)
trainY = np.asarray(trainY)
testY = np.asarray(testY)
# use Dataset class from Tefla
data_set = DataSet(trainX, trainY, testX, testY)
这里我们将数据集的词汇量大小视为10000。
2.定义基于LSTM的RNN模型来对句子进行分类。
您也可以使用普通的Conv层来构建文本数据的分类模型。在这个例子中我使用的是lstm。
Tefla具有建立在tensorflow顶部的高级层定义,用于许多RNN cell,例如LSTM,GRU,Attention 等。
在这里,我们将定义一个具有一个嵌入层,一个lstm层和一个最终分类层的模型。嵌入层将输入数据投影到特征维度128的嵌入空间中。
为了避免为所有的层编写相同的参数,我们定义了一个函数来使用commonlayerargs和makeargs来准备普通层参数。
通用参数如is_training或变量重用对所有层都是一样的,可以使用common_layer_args定义,卷积/RNN/全连接层的参数可以使用make_args函数定义在通用参数的顶部。Python代码如下:
def model(x, is_training, reuse, num_classes=2):
common_args = common_layer_args(is_training, reuse)
fc_args = make_args(activation=relu, **common_args)
logit_args = make_args(activation=None, **common_args)
x = embedding(x, 10000, 128, reuse)
x = lstm(x, 34, reuse, is_training)
logits = fc(x, num_classes, name='logits', **logit_args)
predictions = softmax(logits, name='predictions', **common_args)
return end_points(is_training)
3.编写训练循环
我们还需要定义训练配置
training_cnf = {
'classification': True,
'batch_size_train': 32,
'batch_size_test': 32,
'validation_scores': [('accuracy',tf.metrics.accuracy)],
'num_epochs': 50,
'input_size': (100, ),
'lr_policy': StepDecayPolicy(schedule={
0: 0.01,
30: 0.001,
})
}
最后创建op来训练模型
learner = SupervisedLearner(
model,
training_cnf,
classification=training_cnf['classification'],
is_summary=False,
num_classes=2)
训练模型
learner.fit(data_set, weights_from=None, start_epoch=1)
希望你会发现Tefla对深度学习开发很有用。