一、TensorFlow(参见
中文文档
)
TensorFlow其命名基于工作原理,
tensor
意为
张量
(即多维数组),
flow
意为
流动
。即多维数组从数据流图一端流动到另一端。TensorFlow 让我们可以先绘制计算结构图, 也可以称是一系列可人机交互的计算操作, 然后把编辑好的Python文件转换成更高效的C++, 并在后端进行计算。
TensorFlow主要是由计算图、张量以及模型会话三个部分组成。首先需要构建一个计算图,然后按照计算图启动一个会话,在会话中完成变量赋值,计算,得到最终结果等操作。
1.数据流图(Data Flow Graph)
数据流图用
“结点”(nodes)和“线”(edges)
的有向图来描述数学计算。
- “节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。
- “线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。
张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。
2.TensorBoard(可视化工具)
为了更方便 TensorFlow 程序的理解、调试与优化,可以用 TensorBoard 来展现你的 TensorFlow 图像,绘制图像生成的定量指标图以及附加数据。
二、keras(具体使用参考
keras中文文档
)
Keras 是一个兼容 Theano 和 Tensorflow 的神经网络高级包, 用他来组件一个神经网络更加快速.
遵循 处理数据集——建立模型——compile(指定loss和优化器)——fit(train集)——evaluate(test集)——predict
1.数据集
keras内部收入了常用的一些数据集(电影评论IMDB、路透社新闻reuters、MNIST 手写字符数据集),直接import即可
譬如from keras.datasets import imdb
划分数据集可以直接导入sklearn.model_selection的中的train_test_split函数
2.建立模型
(1)顺序模型
可以用add方法,也可以直接按下图写在一起
注意需要在第一层指定input_shape,例如(784,),如果是二维的则可以直接指定input_length/input_dim = 784
embedding层
:可以自己导入预训练matrix,也可以导入,直接指定size。可以选择trainable为true或者false
BN层
:加速收敛,防止过拟合
dropout层
:指定随机失活率,防止过拟合,参数一般选0.5
LSTM层
:可以利用return_sequences参数来返回所有结果还是最后结果
(2)序贯模型
区别在于可以merge,还可以复用,更加灵活。而且predict_classes函数只能在序贯模型中使用。
(3)compile
主要用来指定优化器和loss,优化器可以自定义(调整
学习率
),也可以直接用’adam’等名称指定
注意,学习率过高可能导致模型完全不收敛
(4)fit
可以指定callbacks,譬如ModelCheckpoint、早停、或者自定义每个epoch都评估F1等
#自建召回率计算函数,每一Epochs都进行F1计算
from keras.callbacks import Callback
from sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_score
class Metrics(Callback):
def on_train_begin(self, logs={}):
self.val_f1s = []
self.val_recalls = []
self.val_precisions = []
def on_epoch_end(self, epoch, logs={}):
val_predict = (np.asarray(self.model.predict(self.validation_data[0]))).round()
val_targ = self.validation_data[1]
_val_f1 = f1_score(val_targ, val_predict,average='weighted')
_val_recall = recall_score(val_targ, val_predict,average='weighted')
_val_precision = precision_score(val_targ, val_predict,average='weighted')
self.val_f1s.append(_val_f1)
self.val_recalls.append(_val_recall)
self.val_precisions.append(_val_precision)
print( ' — val_f1: %f — val_precision: %f — val_recall %f' %(_val_f1, _val_precision, _val_recall))
return
metrics = Metrics()
earlyStopping = EarlyStopping(monitor='val_acc', patience=5, verbose=1, mode='max')
filepath="xx.hdf5"
checkpoint = ModelCheckpoint(filepath,monitor='val_acc', verbose=1,save_best_only=True)
callbacks_list = [earlyStopping,metrics,checkpoint]
model.fit(x_train, y_train, batch_size=128,epochs=30,callbacks=callbacks_list,shuffle =True,validation_data=(x_test, y_test))
还可以使用callbacks中的TensorBoard
最简单的方式就是直接调用 tensorBoardCallback = TensorBoard(log_dir=’./logs’, write_graph=True),其他方式可
参考
(5)evaluate/predict
注意一一对应,如果将y改为one-hot编码,则对应的也要用predict_classes或者用np.max来找最大的那个label
3.Pytorch(
中文文档
)
Torch 自称为神经网络界的 Numpy, 因为他能将 torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算,开发团队将 Lua 的 Torch 移植到了更流行的语言 Python 上,所以PyTorch 说他就是在神经网络领域可以用来替换 numpy 的模块。
PyTorch 最大优点就是建立的神经网络是
动态的
, 对比静态的 Tensorflow, 他能更有效地处理一些问题, 比如说 RNN 变化时间长度的输出。PyTorch还有自动求导机制。