【TensorFlow_Fold】配置在Jupyter Notebook下的Fold代码环境

TensorFlow_Fold

TensorFlow_Fold in Jupyter Notebook

Jupyter on CentOS7
效果预览如上图,环境为 CentOS7 + Python with TensorFlow1.0(Fold include)

How to add kernel for Jupyter

jupyter里一般是没有我们自己设定的env下的python的,比如我包含tensorflow_fold库的python就是在source activate tensorflow1.0后才能获取到,所以在为notebook添加这个环境下的python才可以在notebook里获取到。

sudo pip install -U ipykernel
# source activate tensorflow1.0
python -m ipykernel install --user

简要的解释一下,如果是Linux环境,有一个叫做ipykernel的包可以轻易的添加kernel,不过需要注意的是,一定要确认当前python是不是想加进去的那个python哦,可以用which python来check一下。

KernelList
导入成功之后,就可以在New的时候看到这个kernel啦。

关于GPU的选择使用

假如你们的机器上,有多个GPU,鉴于tensorflow会擅自把所有GPU都拿来用,你想要只用里面的某一个来跑就足够了(比如我们组的四路泰坦,我就跑点小程序请不动这么多尊大神)

GPU

那么,在代码前(请注意,是在import前!)加入如下代码即可,比如下面我用的是序号为0的GPU:

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"

Tips:import tensorflowimport tensorflow_fold都会在import的时候就决定了使用哪些GPU,所以一定要先设置好environ,再import这俩兄弟。

About TensorFlow_Fold

封装在静态框架上的动态接口

  • Dynamic Batching的算法很繁琐,但不用当心,这个过程是由框架自动完成的,作为框架的使用者,我们只要知道怎么调用官方给出来的接口就可以了。
  • 新推出的TensorFlow Fold就是一个TensorFlow的封装,设计参考了函数式编程的一些思想,目的就是方便用户快速地构建动态计算图。下面我们来简单地浏览一下,要进一步了解可以去看官方的教学文档。Documents
  • TensorFlow Fold提供了一些函数专门用来处理序列(x1,…,xn):
    • Map(f):计算[f(x1) ,…,f(xn)]将函数f应用到每一个序列的元素,比如将句子中的每一个词转化为词向量;
    • Fold(g, z):计算g(…,g(z, x1), x2), …,xn ),比如说展开一个RNN(循环神经网络);
    • Reduce (g):计算g(Reduce(g)[x1 ,…,xn/2],Reduce(g)[xn/2 ,…,xn],将函数g应用到一颗平衡二叉树上,比如对序列中的元素作max或sum-pooling。
  • 由于TensorFlow原本的基本单元Tensor不适合用于构建动态图,所以Fold引入新的基本组件Block。Block有明确的一个输入类型和一个输出类型,包括:
    • Input:来着编程语言如Python中元素,比如字典等;
    • Tensor:拥有数据类型和形状的TensorFlow基本模块;
    • Tuple (t1 ,…,tn ):括号中的每一个t表示对应位置的类型;
    • Sequence (t):一个不定长的拥有类型为t的元素的序列;
    • Void:单元类型。这些基本类型可以相互嵌套,比如一个Block的输入类型可以是Input类型的Tuple。
  • 用来创建Block的基本函数有:
    • Scalar:将Python标量转化为Tensor;Tensor:将Numpy数组转化为Tensor;Function (h ):创建一个Operation;
    • InputTransform (h):用于预处理Python类型。
  • 用来组合Block的基本函数有:
    • b1>>b2,流水线(pipeline):将b1 的输出作为b2 的输入;
    • Record({l1:b1,…, ln:bn}): 接受一个Python字典为输入,对字典中key值为li 的value应用;
    • OneOf (b1,…,bn):根据输入条件应用b1,…bn中的一个;
    • Optional (b):OneOf的特例,如果输入不为None,应用b;
    • AllOf (b1,…,bn):输入应用中的每一个。
  • 用来组合Block的高级函数有:
    • Composition():流水线的升级版,流水线只能处理串行的流程,Composition()创建一个Scope对象,在这个Scope的缩进范围内,采用b.reads(b1,…,bn )来读取多个数据流,可以用于构建多分支结构;
    • ForwardDeclaration():用来创建递归结构,这个函数可以先定义一个预先占位的表达式expr,等这个表达式定义完再用expr.resolve_to(expr_def),将表达式递归地代入,这是用来创建树结构计算图必不可少的工具。

Coding Logs

敲几个试试手……

"""
td.InputTransform(fn):
Python Function to Blocks
"""

def func(alist):
    return (alist[3], alist[0]+alist[1])

b = td.InputTransform(func)
b.eval([1,2,3,4])  # => (4,3)
"""
tf.split(value, num_or_size_splits, axis=0, num=None, name='split'):
Splits a tensor into sub tensors.
"""

# 'value' is a tensor with shape [5, 30]
# Split 'value' into 3 tensors with sizes [4, 15, 11] along dimension 1
split0, split1, split2 = tf.split(value, [4, 15, 11], 1)
tf.shape(split0) ==> [5, 4]
tf.shape(split1) ==> [5, 15]
tf.shape(split2) ==> [5, 11]
# Split 'value' into 3 tensors along dimension 1
split0, split1, split2 = tf.split(value, num_or_size_splits=3, axis=1)
tf.shape(split0) ==> [5, 10]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
train_test_split和k_fold都是用于数据集划分的方法,但在实现上有一些不同。 train_test_split是交叉验证中常用的函数,它可以从样本中随机地按比例选取训练集和测试集。在使用sklearn库中的train_test_split函数时,我们可以指定要划分的数据集、训练集和测试集的比例以及随机种子。例如,可以使用以下代码将数据集划分为训练集和测试集: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(train_data, train_target, test_size=0.2, random_state=0) ``` k-fold是一种交叉验证技术,它将数据集划分为k个子集,其中k-1个子集用于训练模型,剩余的一个子集用于测试模型。这个过程会重复k次,每次使用不同的子集作为测试集。k-fold交叉验证可以更准确地评估模型的性能,因为它使用了整个数据集的多个子集进行训练和测试。例如,可以使用以下代码将数据集划分为k个子集,并进行k-fold交叉验证: ```python from sklearn.model_selection import KFold k_fold = KFold(n_splits=5) for train_index, test_index in k_fold.split(data): X_train, X_test = data[train_index], data[test_index] y_train, y_test = target[train_index], target[test_index] # 在这里使用LVQ算法进行训练和测试 ``` 综上所述,train_test_split和k_fold都是用于数据集划分的方法,但train_test_split是按比例随机选取训练集和测试集,而k-fold是将数据集划分为k个子集进行交叉验证。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据集划分train_test_split\交叉验证Cross-validation](https://blog.csdn.net/u010986753/article/details/98069124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [手搓函数,实现train_test_split一样的数据集划分](https://blog.csdn.net/ouyang_xiaogan/article/details/123279970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [lvq.rar_5-fold_The Fold_k fold_k fold cross_lvq](https://download.csdn.net/download/weixin_42665255/86613035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果天王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值