Blender2.8正式版基础(一)基础操作与常用快捷键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blender2.8正式版基础(一)基础操作与常用快捷键相关的知识,希望对你有一定的参考价值。

参考技术A 1、返回次数设置:

2、中文设置:

▶ 单位设置:

▶ 着色器连线曲度设置:

▶ 默认启动界面

3、删除材质球:在层级视图→Blender文件里删除

▶ 把框选和移动工具集成在一起使用:Blender的框选跟移动工具是分开的,只能同时使用一个,没Maya等三维软件那么方便,但设置一下也能跟Maya一样。

▶Ctrl+N:创建新工程(创建时选择“常规”可以重置Blender)

▶ 微调:滑动数值、缩放等等操作都可以按Shift进行微调

▶ Tab:编辑模式与物体模式/其他模式切换

▶ Shift+R:重复上一个命令

▶ 撤销:Ctrl+Z

▶ 重做:Shift+Ctrl+Z(返回上一步的“撤销”操作)

▶ 操作搜索:F3

🌛1、放大视图

▶ 视图最大化显示:Ctrl+空格(左键点击视图任意地方可以选择视图,然后按Ctrl+空格可以最大化显示视图。)

▶ 切换全屏模式:Ctrl+Alt+空格

🌛2、切换视图

▶ 视图切换菜单:【~】(ESC键下面)

▶ 切换视图:Alt(按住不放)+按住中键上下或左右移动鼠标(每切换一次视图就必须重新按一下中键并移动鼠标)

▶ 透视图:中键+随意移动鼠标

▶ 顶视图:数字键盘【7】

▶ 底视图:数字键盘【Ctrl+7】

▶ 前视图:数字键盘【1】

▶ 后视图:数字键盘【Ctrl+1】

▶ 右视图:数字键盘【3】

▶ 左视图:数字键盘【Ctrl+3】

▶ 摄像机视图:数字键盘【0】

▶ 正交视图/透视图: 数字键盘【5】

▶ 透视图/四视图:Ctrl+Alt+Q

▶ 反转视图: 数字键盘【9】,比如前后反转/上下反转/左右反转。

🌛3、旋转视图

▶ 上下旋转视图: 数字键盘【8】

▶ 下上旋转视图: 数字键盘【2】

▶ 右左旋转视图: 数字键盘【6】

🌛4、视图操作

▶ 移动:Shift+中键

▶ 旋转:中键

▶ 缩放:Ctrl+上下(或左右)移动中键

🌛4、视窗互交

▶ 视窗互交:把指针放到视窗右下角,按住Ctrl+左键不放,出现+号时,拖动到其他视窗,可以互换。

▶ 空格键: 显示隐藏操纵杆

▶ H:隐藏选中项

▶  Shift+H: 隐藏未中项

▶ Alt+ H:显示 隐藏对象

▶ 数字键盘【 / 】:单独放大显示选择的对象(其他物件会被隐藏),这时候Home键不起作用,要再按一次【/】返回之前的状态,就可以把隐藏的物件显示出来(这时候Home键就可以用了)。

▶ 数字键盘【 . 】:居中放大显示选择对象

▶ ? 号键:最大化显示选择对象(其他对象会被隐藏),再次使用可以返回。

▶ Home :全局显示(可以查看场景全部对象

▶ N: 显示Properties(属性)栏【查看对象属性】,激活的插件也在这里查看。

▶ 生成关联项菜单: Ctrl+L(作用:比如把一个模型用到的修改器复制到其他模型上面:操作方法,选择所有需要复制修改器的模型,最后加选/ 最后选择 使用修改器的模型,然后按Ctrl+L打开 生成关联项菜单 ,选择 修改器。 之后想调节数值时, 按住Alt ,调节的数值会关联到被复制修改器的模型上面。)

▶ Apply应用菜单:Ctrl+A  把对象变换参数重置归零。

▶ 重置模型(相当于3D Max里的重置模型命令):Ctrl+A 打开Apply应用菜单,选择“全部变换”。缩放拉伸模型后再布线、倒角就会有问题,这时候就需要重置模型了。

▶ 半透明显示 : Alt+Z(可以选择到背面)

▶ 线框显示:Shift+Z  (可以选择到背面)

▶线框显示下忽略背面:

▶ Z:显示模式选择【按住Z的同时快速滑动鼠标到想要的模式,就可以快速切换显示模式】

▶ Z:需要开启插件:3D Viewport Pie Menus

▶ 坐标系:< 键 (空格键右上角)

▶ 轴心点:> 键 (空格键右上角)

▶ 视图:~

▶ T:显示工具菜单

▶ Shift+空格:打开工具菜单

▶ 显示法线方向:编辑模式下

▶ AO效果显示:

▶ Shift+S:游标操作菜单

▶ Shift+右键:可以随意放置游标

▶ Shift+C:重置游标到世界坐标中心

▶ 以游标为中心操作视图:按N打开Properties(属性)栏,在视图选项里勾选【锁定到3D游标】,然后就可以以游标为中心操作视图了。

更改坐标系:

▶ ALT+G:对象归零到世界坐标中心

▶ ALT+R:旋转归零

▶ ALT+S:缩放归零

▶ 撤销(返回):Ctrl+Z

▶ Shift+A:创建菜单(可以创建对象)

▶ 移动:G/或者选择移动工具 【操作方法1、按G后可以随意移动物体; 2、按G后再按X/Y/Z,或者按G后再按中键,可以在X/Y/Z三个坐标轴上移动。】

▶ 使点、边在线上滑动:按两次G;再按Ctrl可以等比例移动;不动鼠标,按上下键可以精确移动

▶ 缩放:S/或者选择缩放工具(缩放过程中可以按X\Y\Z,使模型沿轴向缩放,这时候在按Shift+X\Y\Z,可以使模型沿两个轴向缩放。)

▶ 旋转:R/或者选择旋转工具

▶ Ctrl+Tab:切换到编辑、物体、雕刻、纹理绘制、顶点绘制、权重绘制等模式

▶Tab:编辑模式/物体模式切换

▶ 关联复制:Alt+D

▶ 原地复制:Ctrl+C 然后再按Ctrl+V可以原地复制了

▶ 镜像:按Ctrl+M之后,再按X/Y/Z

▶ 游标选项:Shift+S

▶ 多边形建模:点级别下Ctrl+右键(提前得有一个点,选择这个点后,按Ctrl+右键,可以自由产生线,然后按F补面,可以与挤出结合使用)

▶ 细分级别:Ctrl+1~5(物体模式下)

▶ W:框选、套索、圈选工具切换

▶ Ctrl+M:镜像(反向翻转),按Ctrl+M后需要选择翻转轴向。

▶ 点、线、面级别:1、2、3

▶ 点、线、面菜单:Ctrl+V、Ctrl+E、Ctrl+F

▶ 挤出:E、Ctrl+右键 (前提:在选择点、先、面的情况下)

▶ 沿法线方向挤出/挤出各个面(独立挤出):Alt+E

▶ Spin旋转复制/挤出工具:(只能在编辑模式下使用)

▶ 塌陷:ALT+M

▶ 合并顶点:按ALT+M选择By Distance

▶ 自动合并顶点(把一个点拖到另一个点,并使两个点自动变成一个点):按N打开工具菜单

▶ 删除:X 【可以选择删除对象/点/线/面】。再物体模式下可以按Delete删除。

▶ 提取点线面:Shift+D

▶ V:切割分离工具(按V后 移动鼠标拉开模型)

▶ 拆分:Y

▶ 环形切线:Ctrl+R 【1、按Ctrl+R后,点左键再点右键确认切线在线的中间位置;2、点左键后,可以移动切线位置,再点左键确认切线;3、按Ctrl+R后,滑动鼠标滚轮可以增加和减少线段(线条变黄色的时候可以增加分段,变橘黄色就不可以了),或者直接按数字】

▶ 自由切线:K (1、切线过程中按Ctrl不放可以捕捉到线的中间点;2、Shift不放可以取消吸附;3、切线完后按E可以重新加切线;4、按Enter确认切线)

▶ 劈线:K (1、劈线过程中按Z可忽略背面;2、按C可以平行/垂直/45度角劈线)

▶ 切分模型:看下图

▶ 连线:J(两点之间连接一条线)

▶ 倒角:Ctrl+B:按Ctrl+B后,左右/上下移动鼠标调节倒角大小,按住Shift可以微调;滑动鼠标滚轮可以添加分段

▶ 顶点倒角:Ctrl+shift+B(滑动鼠标滚轮可以细分)

▶ 插入面:I (1、插入面过程中按Ctrl变成挤出。2、插入面后再次按I变成插入各自的面)

▶ F:【补洞/填充】:1、可以智能填充,选择边界边或一条边后按F;2、桥接:选择三个以上的顶点或者两条以上的边后按F。

▶ Poly Build:(拓补常用)

▶ 弯绕工具:shift+W

▶ ALT+S:使元素(点线面)沿法线方向收缩(移动)

▶ 沿着线移动点线面(编辑模式下):快速按两次G

▶  吸附: 按G移动的时候,按 Ctrl不放可以临时打开吸附功能

▶ 球形化工具:选择工具后按住左键不放并移动鼠标

▶ 整平凹凸面:流程1、把要整平的凹凸面朝向X或Y或Z轴。2、选择点、线、面。3、按S缩放。4、再按X或Y或Z(要整平的凹凸面的朝向),使面沿轴向缩放。5、然后按0(零键),就能把凹凸面整平了。

▶给模型分组:M

▶快速在层级里找到目标模型:数字键盘( . ),操作:选择模型后点层级视图激活视图,然后按数字键盘( . ),就能在层级里找到目标模型。

▶ 背面选择开关:ALT+Z

▶ 加选:Shift+左键

▶ 减选:Ctrl+左键

▶ 套索加选:Ctrl+右键

▶ 套索减选:Ctrl+Shift+右键

▶ 扩展/缩减选择:Ctrl+数字键盘【+】/【-】

▶ 选择全部元素(点线面):Ctrl+L

▶Loop(循环)选择:ALT+左键 (1。循环选择点、线:ALT+左键都选择线就可以了);(2。循环选择面:这里有个前提,即必须有一个方向才能循环选择。比如:我要左右环形选择一圈面,这时候要把鼠标指针放到面的靠左边部分或靠右边部分,不能放在面的中间。)

▶Ring(环形)选择:Ctrl+ALT+左键 (这里用于环形线的选择,面也可以)

▶ 快速选择整个模型:在选择点、线、面之后按 Ctrl+L 【选择整个模型后还有一个操作: Ctrl+右键 可以复制当前选择的模型】

▶ 全部选择:A  (1、左键点空白处取消选择,或者按两次A取消选择;2、按下图设置之后按A选择,再按一次A取消选择)

▶ 方形框选:B

▶ 画笔加选:C (缩放笔刷:中键。取消笔刷:右键)

▶反向选择:Ctrl+I

▶ 软选择:

▶ 模型Smooth:Ctrl+1(物体模式下)

▶ 选择相似的:Shift+G (例如,角度相近的硬边)

▶ 边线折痕:Shift+E

▶ 面级别下 Ctrl+F或者右键打开菜单: 1.平滑着色(软面)。2.平直着色(硬面)。

详细设置看下图。(有时候勾选“自动光滑”好像不起作用,这时候在模型上重新右键给光滑组后,在点“自动光滑”才起作用。)

▶  把软边转为硬边 :选择边后,按Ctrl+E或者右键打开边菜单,选择 “标记为锐边”

▶ 向外重置法线:Shift+N(编辑模式下)

▶ 向内重置法线:Ctrl+Shift+N

▶ 反转法线:ALT+N

有时候想删掉曲线会把模型也删掉,这时候需要重置下模型在删除曲线。

▶ 关闭曲线的法线方向显示:

▶ V:控制柄控制类型

▶ E:挤出

▶ Shift+N:重新计算(重新计算控制柄的方向)

▶ 加点:选择两个相邻的点右键选择【细分】

▶ P:分离

▶ F:缝合(首尾相连),使两个点相连

▶ Ctrl+T:倾斜扭曲/Alt+T:恢复倾斜扭曲(必须在3D模式下才能用)

▶ Alt+S:缩放(可以对点进行缩放)

▶ 曲线形变:Ctrl+P(操作流程:先选择模型,然后按Shift加选曲线,按Ctrl+P选择曲线形变,再选择模型打开模型的修改器面板,然后调节坐标)

▶ 将曲线转换为模型(要在物体模式下):

▶ 标记缝合边:线级别下选择要断开的边,然后右键选择【标记缝合边】,再按U键展开UV(UV编辑下)。

▶ 图钉:P (这个会经常用到。比如点对齐,先要打图钉才能对齐。)

▶ 选择孤立的UV:L

▶ 刷新贴图(Reloaded images):Alt+R(更新贴图时不用手动加载每张贴图了)(前提:开启Node:Node Wrangler插件)

▶ 添加材质节点:Shift+A 

▶ 断开节点所有链接:Alt+左键拖动节点即可

▶ 断开节点链接:Ctrl+右键拖动鼠标在连接线上画线即可断开链接

▶ 插件Node:Node Wrangler(作用:自动添加并连接相关节点;操作:选择某个节点后,按Ctrl+T)

▶ 单独预览某个节点:Ctrl+Shift+左键点击节点(前提:开启Node:Node Wrangler插件)

▶ 播放/暂停:空格键

▶ 笔刷缩放: 按F,然后移动鼠标,左键确认。右键是取消。

▶ 笔刷强度:Shift+F

▶ 平滑细节:Shift+左键

▶ 反向雕刻(凹凸):Ctrl+左键

▶ 空格键: 显示隐藏操纵杆

▶ 桥接循环边:选择边后右键打开选择桥接循环边

TensorFlow基础——常用函数

目录:

一、TensorFlow的基本操作

二、tf函数

三、TensorFlow的算术操作

四、张量操作Tensor Transformations

4.1 数据类型转换Casting

4.2 形状操作Shapes and Shaping

4.3 切片与合并(Slicing and Joining)

五、矩阵相关运算

六、复数操作

七、归约计算(Reduction)

八、分割(Segmentation)

九、序列比较与索引提取(Sequence Comparison and Indexing)

十、神经网络(Neural Network)

  • 激活函数(Activation Functions)

  • 卷积函数(Convolution)

  • 池化函数(Pooling)

  • 数据标准化(Normalization)

  • 损失函数(Losses)

  • 分类函数(Classification)

  • 符号嵌入(Embeddings)

  • 循环神经网络(Recurrent Neural Networks)

  • 求值网络(Evaluation)

  • 监督候选采样网络(Candidate Sampling)

十一、保存与恢复变量

 

 

一、tensorflow的基本运作

为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始:

 1 import tensorflow as tf
 2  #定义‘符号’变量,也称为占位符
 3  a = tf.placeholder(shape=[1], dtype=tf.float32)
 4  b = tf.placeholder(shape=[1], dtype=tf.float32)
 5 
 6  y = tf.multiply(a, b) #构造一个op节点
 7 
 8  sess = tf.Session()#建立会话
 9  #运行会话,输入数据,并计算节点,同时打印结果
10  print sess.run(y, feed_dict={a: 3, b: 3})
11  # 任务完成, 关闭会话.
12  sess.close()

其中tf.multiply(a, b)函数便是tf的一个基本的算数运算,接下来介绍跟多的相关函数。

二、tf函数

TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU。一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测。如果检测到 GPU, TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作. 并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进。大部分核相关的操作都是设备相关的实现,比如GPU。下面是一些重要的操作/核:

操作组

操作

Maths

Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal

Array

Concat, Slice, Split, Constant, Rank, Shape, Shuffle

Matrix

MatMul, MatrixInverse, MatrixDeterminant

Neuronal Network

SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool

Checkpointing

Save, Restore

Queues and syncronizations

Enqueue, Dequeue, MutexAcquire, MutexRelease

Flow control

Merge, Switch, Enter, Leave, NextIteration

三、TensorFlow的算术操作

操作

描述

tf.add(x, y, name=None)

求和

tf.sub(x, y, name=None)

减法

tf.mul(x, y, name=None)

乘法

tf.div(x, y, name=None)

除法

tf.mod(x, y, name=None)

取模

tf.abs(x, name=None)

求绝对值

tf.neg(x, name=None)

取负 (y = -x).

tf.sign(x, name=None)

返回符号 y = sign(x) = -1 if x < 0; 0 if x == 0; 1 if x > 0.

tf.inv(x, name=None)

取反

tf.square(x, name=None)

计算平方 (y = x * x = x^2).

tf.round(x, name=None)

舍入最接近的整数

# ‘a’ is [0.9, 2.5, 2.3, -4.4]

tf.round(a) ==> [ 1.0, 3.0, 2.0, -4.0 ]

tf.sqrt(x, name=None)

开根号 (y = \\sqrt{x} = x^{1/2}).

tf.pow(x, y, name=None)

幂次方 

# tensor ‘x’ is [[2, 2], [3, 3]]

# tensor ‘y’ is [[8, 16], [2, 3]]

tf.pow(x, y) ==> [[256, 65536], [9, 27]]

tf.exp(x, name=None)

计算e的次方

tf.log(x, name=None)

计算log,一个输入计算e的ln,两输入以第二输入为底

tf.maximum(x, y, name=None)

返回最大值 (x > y ? x : y)

tf.minimum(x, y, name=None)

返回最小值 (x < y ? x : y)

tf.cos(x, name=None)

三角函数cosine

tf.sin(x, name=None)

三角函数sine

tf.tan(x, name=None)

三角函数tan

tf.atan(x, name=None)

三角函数ctan

 

四、张量操作Tensor Transformations

4.1 数据类型转换Casting

操作

描述

tf.string_to_number

(string_tensor, out_type=None, name=None)

字符串转为数字

tf.to_double(x, name=’ToDouble’)

转为64位浮点类型–float64

tf.to_float(x, name=’ToFloat’)

转为32位浮点类型–float32

tf.to_int32(x, name=’ToInt32’)

转为32位整型–int32

tf.to_int64(x, name=’ToInt64’)

转为64位整型–int64

tf.cast(x, dtype, name=None)

将x或者x.values转换为dtype

# tensor a is [1.8, 2.2], dtype=tf.float

tf.cast(a, tf.int32) ==> [1, 2] # dtype=tf.int32

4.2 形状操作Shapes and Shaping

操作

描述

tf.shape(input, name=None)

返回数据的shape

# ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]

shape(t) ==> [2, 2, 3]

tf.size(input, name=None)

返回数据的元素数量

# ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]]

size(t) ==> 12

tf.rank(input, name=None)

返回tensor的rank

注意:此rank不同于矩阵的rank,

tensor的rank表示一个tensor需要的索引数目来唯一表示任何一个元素

也就是通常所说的 “order”, “degree”或”ndims”

#’t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]

# shape of tensor ‘t’ is [2, 2, 3]

rank(t) ==> 3

tf.reshape(tensor, shape, name=None)

改变tensor的形状

# tensor ‘t’ is [1, 2, 3, 4, 5, 6, 7, 8, 9]

# tensor ‘t’ has shape [9]

reshape(t, [3, 3]) ==> 

[[1, 2, 3],

[4, 5, 6],

[7, 8, 9]]

#如果shape有元素[-1],表示在该维度打平至一维

# -1 将自动推导得为 9:

reshape(t, [2, -1]) ==> 

[[1, 1, 1, 2, 2, 2, 3, 3, 3],

[4, 4, 4, 5, 5, 5, 6, 6, 6]]

tf.expand_dims(input, dim, name=None)

插入维度1进入一个tensor中

#该操作要求-1-input.dims()

# ‘t’ is a tensor of shape [2]

shape(expand_dims(t, 0)) ==> [1, 2]

shape(expand_dims(t, 1)) ==> [2, 1]

shape(expand_dims(t, -1)) ==> [2, 1] <= dim <= input.dims()

4.3 切片与合并(Slicing and Joining)

操作

描述

tf.slice(input_, begin, size, name=None)

对tensor进行切片操作

其中size[i] = input.dim_size(i) - begin[i]

该操作要求 0 <= begin[i] <= begin[i] + size[i] <= Di for i in [0, n]

#’input’ is 

#[[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]]

tf.slice(input, [1, 0, 0], [1, 1, 3]) ==> [[[3, 3, 3]]]

tf.slice(input, [1, 0, 0], [1, 2, 3]) ==> 

[[[3, 3, 3],

[4, 4, 4]]]

tf.slice(input, [1, 0, 0], [2, 1, 3]) ==> 

[[[3, 3, 3]],

[[5, 5, 5]]]

tf.split(split_dim, num_split, value, name=’split’)

沿着某一维度将tensor分离为num_split tensors

# ‘value’ is a tensor with shape [5, 30]

# Split ‘value’ into 3 tensors along dimension 1

split0, split1, split2 = tf.split(1, 3, value)

tf.shape(split0) ==> [5, 10]

tf.concat(concat_dim, values, name=’concat’)

沿着某一维度连结tensor

t1 = [[1, 2, 3], [4, 5, 6]]

t2 = [[7, 8, 9], [10, 11, 12]]

tf.concat(0, [t1, t2]) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

tf.concat(1, [t1, t2]) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]

如果想沿着tensor一新轴连结打包,那么可以:

tf.concat(axis, [tf.expand_dims(t, axis) for t in tensors])

等同于tf.pack(tensors, axis=axis)

tf.pack(values, axis=0, name=’pack’)

将一系列rank-R的tensor打包为一个rank-(R+1)的tensor

# ‘x’ is [1, 4], ‘y’ is [2, 5], ‘z’ is [3, 6]

pack([x, y, z]) => [[1, 4], [2, 5], [3, 6]] 

# 沿着第一维pack

pack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]]

等价于tf.pack([x, y, z]) = np.asarray([x, y, z])

tf.reverse(tensor, dims, name=None)

沿着某维度进行序列反转

其中dim为列表,元素为bool型,size等于rank(tensor)

# tensor ‘t’ is 

[[[[ 0, 1, 2, 3],

#[ 4, 5, 6, 7],

#[ 8, 9, 10, 11]],

#[[12, 13, 14, 15],

#[16, 17, 18, 19],

#[20, 21, 22, 23]]]]

# tensor ‘t’ shape is [1, 2, 3, 4]

# ‘dims’ is [False, False, False, True]

reverse(t, dims) ==>

[[[[ 3, 2, 1, 0],

[ 7, 6, 5, 4],

[ 11, 10, 9, 8]],

[[15, 14, 13, 12],

[19, 18, 17, 16],

[23, 22, 21, 20]]]]

tf.transpose(a, perm=None, name=’transpose’)

调换tensor的维度顺序

按照列表perm的维度排列调换tensor顺序,

如为定义,则perm为(n-1…0)

# ‘x’ is [[1 2 3],[4 5 6]]

tf.transpose(x) ==> [[1 4], [2 5],[3 6]]

# Equivalently

tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5], [3 6]]

tf.gather(params, indices, validate_indices=None, name=None)

合并索引indices所指示params中的切片

技术图片

tf.one_hot

(indices, depth, on_value=None, off_value=None, 

axis=None, dtype=None, name=None)

indices = [0, 2, -1, 1]

depth = 3

on_value = 5.0 

off_value = 0.0 

axis = -1 

#Then output is [4 x 3]: 

output = 

[5.0 0.0 0.0] // one_hot(0) 

[0.0 0.0 5.0] // one_hot(2) 

[0.0 0.0 0.0] // one_hot(-1) 

[0.0 5.0 0.0] // one_hot(1)

五、矩阵相关运算

操作

描述

tf.diag(diagonal, name=None)

返回一个给定对角值的对角tensor

# ‘diagonal’ is [1, 2, 3, 4]

tf.diag(diagonal) ==> 

[[1, 0, 0, 0]

[0, 2, 0, 0]

[0, 0, 3, 0]

[0, 0, 0, 4]]

tf.diag_part(input, name=None)

功能与上面相反

tf.trace(x, name=None)

求一个2维tensor足迹,即对角值diagonal之和

tf.transpose(a, perm=None, name=’transpose’)

调换tensor的维度顺序

按照列表perm的维度排列调换tensor顺序,

如为定义,则perm为(n-1…0)

# ‘x’ is [[1 2 3],[4 5 6]]

tf.transpose(x) ==> [[1 4], [2 5],[3 6]]

# Equivalently

tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5], [3 6]]

tf.matmul(a, b, transpose_a=False, 

transpose_b=False, a_is_sparse=False, 

b_is_sparse=False, name=None)

矩阵相乘

tf.matrix_determinant(input, name=None)

返回方阵的行列式

tf.matrix_inverse(input, adjoint=None, name=None)

求方阵的逆矩阵,adjoint为True时,计算输入共轭矩阵的逆矩阵

tf.cholesky(input, name=None)

对输入方阵cholesky分解,

即把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解A=LL^T

tf.matrix_solve(matrix, rhs, adjoint=None, name=None)

求解tf.matrix_solve(matrix, rhs, adjoint=None, name=None)

matrix为方阵shape为[M,M],rhs的shape为[M,K],output为[M,K]

 六、复数操作

操作

描述

tf.complex(real, imag, name=None)

将两实数转换为复数形式

# tensor ‘real’ is [2.25, 3.25]

# tensor imag is [4.75, 5.75]

tf.complex(real, imag) ==> [[2.25 + 4.75j], [3.25 + 5.75j]]

tf.complex_abs(x, name=None)

计算复数的绝对值,即长度。

# tensor ‘x’ is [[-2.25 + 4.75j], [-3.25 + 5.75j]]

tf.complex_abs(x) ==> [5.25594902, 6.60492229]

tf.conj(input, name=None)

计算共轭复数

tf.imag(input, name=None)

tf.real(input, name=None)

提取复数的虚部和实部

tf.fft(input, name=None)

计算一维的离散傅里叶变换,输入数据类型为complex64

七、归约计算(Reduction)

操作

描述

tf.reduce_sum(input_tensor, reduction_indices=None, 

keep_dims=False, name=None)

计算输入tensor元素的和,或者安照reduction_indices指定的轴进行求和

# ‘x’ is [[1, 1, 1]

# [1, 1, 1]]

tf.reduce_sum(x) ==> 6

tf.reduce_sum(x, 0) ==> [2, 2, 2]

tf.reduce_sum(x, 1) ==> [3, 3]

tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]]

tf.reduce_sum(x, [0, 1]) ==> 6

tf.reduce_prod(input_tensor, 

reduction_indices=None, 

keep_dims=False, name=None)

计算输入tensor元素的乘积,或者安照reduction_indices指定的轴进行求乘积

tf.reduce_min(input_tensor, 

reduction_indices=None, 

keep_dims=False, name=None)

求tensor中最小值

tf.reduce_max(input_tensor, 

reduction_indices=None, 

keep_dims=False, name=None)

求tensor中最大值

tf.reduce_mean(input_tensor, 

reduction_indices=None, 

keep_dims=False, name=None)

求tensor中平均值

tf.reduce_all(input_tensor, 

reduction_indices=None, 

keep_dims=False, name=None)

对tensor中各个元素求逻辑’与’

# ‘x’ is 

# [[True, True]

# [False, False]]

tf.reduce_all(x) ==> False

tf.reduce_all(x, 0) ==> [False, False]

tf.reduce_all(x, 1) ==> [True, False]

tf.reduce_any(input_tensor, 

reduction_indices=None, 

keep_dims=False, name=None)

对tensor中各个元素求逻辑’或’

tf.accumulate_n(inputs, shape=None, 

tensor_dtype=None, name=None)

计算一系列tensor的和

# tensor ‘a’ is [[1, 2], [3, 4]]

# tensor b is [[5, 0], [0, 6]]

tf.accumulate_n([a, b, a]) ==> [[7, 4], [6, 14]]

tf.cumsum(x, axis=0, exclusive=False, 

reverse=False, name=None)

求累积和

tf.cumsum([a, b, c]) ==> [a, a + b, a + b + c]

tf.cumsum([a, b, c], exclusive=True) ==> [0, a, a + b]

tf.cumsum([a, b, c], reverse=True) ==> [a + b + c, b + c, c]

tf.cumsum([a, b, c], exclusive=True, reverse=True) ==> [b + c, c, 0]

八、分割(Segmentation)

操作

描述

tf.segment_sum(data, segment_ids, name=None)

根据segment_ids的分段计算各个片段的和

其中segment_ids为一个size与data第一维相同的tensor

其中id为int型数据,最大id不大于size

c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]])

tf.segment_sum(c, tf.constant([0, 0, 1]))

==>[[0 0 0 0] 

[5 6 7 8]]

上面例子分为[0,1]两id,对相同id的data相应数据进行求和,

并放入结果的相应id中,

且segment_ids只升不降

tf.segment_prod(data, segment_ids, name=None)

根据segment_ids的分段计算各个片段的积

tf.segment_min(data, segment_ids, name=None)

根据segment_ids的分段计算各个片段的最小值

tf.segment_max(data, segment_ids, name=None)

根据segment_ids的分段计算各个片段的最大值

tf.segment_mean(data, segment_ids, name=None)

根据segment_ids的分段计算各个片段的平均值

tf.unsorted_segment_sum(data, segment_ids,

num_segments, name=None)

与tf.segment_sum函数类似,

不同在于segment_ids中id顺序可以是无序的

tf.sparse_segment_sum(data, indices, 

segment_ids, name=None)

输入进行稀疏分割求和

c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]])

# Select two rows, one segment.

tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 0])) 

==> [[0 0 0 0]]

对原data的indices为[0,1]位置的进行分割,

并按照segment_ids的分组进行求和

 

九、序列比较与索引提取(Sequence Comparison and Indexing)

操作

描述

tf.argmin(input, dimension, name=None)

返回input最小值的索引index

tf.argmax(input, dimension, name=None)

返回input最大值的索引index

tf.listdiff(x, y, name=None)

返回x,y中不同值的索引

tf.where(input, name=None)

返回bool型tensor中为True的位置

# ‘input’ tensor is 

#[[True, False]

#[True, False]]

# ‘input’ 有两个’True’,那么输出两个坐标值.

# ‘input’的rank为2, 所以每个坐标为具有两个维度.

where(input) ==>

[[0, 0],

[1, 0]]

tf.unique(x, name=None)

返回一个元组tuple(y,idx),y为x的列表的唯一化数据列表,

idx为x数据对应y元素的index

# tensor ‘x’ is [1, 1, 2, 4, 4, 4, 7, 8, 8]

y, idx = unique(x)

y ==> [1, 2, 4, 7, 8]

idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]

tf.invert_permutation(x, name=None)

置换x数据与索引的关系

# tensor x is [3, 4, 0, 2, 1]

invert_permutation(x) ==> [2, 4, 3, 0, 1]

十、神经网络(Neural Network)

  • 激活函数(Activation Functions)

操作

描述

tf.nn.relu(features, name=None)

整流函数:max(features, 0)

tf.nn.relu6(features, name=None)

以6为阈值的整流函数:min(max(features, 0), 6)

tf.nn.elu(features, name=None)

elu函数,exp(features) - 1 if < 0,否则features

Exponential Linear Units (ELUs)

tf.nn.softplus(features, name=None)

计算softplus:log(exp(features) + 1)

tf.nn.dropout(x, keep_prob, 

noise_shape=None, seed=None, name=None)

计算dropout,keep_prob为keep概率

noise_shape为噪声的shape

tf.nn.bias_add(value, bias, data_format=None, name=None)

对value加一偏置量

此函数为tf.add的特殊情况,bias仅为一维,

函数通过广播机制进行与value求和,

数据格式可以与value不同,返回为与value相同格式

tf.sigmoid(x, name=None)

y = 1 / (1 + exp(-x))

tf.tanh(x, name=None)

双曲线切线激活函数

  • 卷积函数(Convolution)

操作

描述

tf.nn.conv2d(input, filter, strides, padding, 

use_cudnn_on_gpu=None, data_format=None, name=None)

在给定的4D input与 filter下计算2D卷积

输入shape为 [batch, height, width, in_channels]

tf.nn.conv3d(input, filter, strides, padding, name=None)

在给定的5D input与 filter下计算3D卷积

输入shape为[batch, in_depth, in_height, in_width, in_channels]

  • 池化函数(Pooling)

操作

描述

tf.nn.avg_pool(value, ksize, strides, padding, 

data_format=’NHWC’, name=None)

平均方式池化

tf.nn.max_pool(value, ksize, strides, padding, 

data_format=’NHWC’, name=None)

最大值方法池化

tf.nn.max_pool_with_argmax(input, ksize, strides,

padding, Targmax=None, name=None)

返回一个二维元组(output,argmax),最大值pooling,返回最大值及其相应的索引

tf.nn.avg_pool3d(input, ksize, strides, 

padding, name=None)

3D平均值pooling

tf.nn.max_pool3d(input, ksize, strides, 

padding, name=None)

3D最大值pooling

  • 数据标准化(Normalization)

操作

描述

tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None)

对维度dim进行L2范式标准化

output = x / sqrt(max(sum(x**2), epsilon))

tf.nn.sufficient_statistics(x, axes, shift=None, 

keep_dims=False, name=None)

计算与均值和方差有关的完全统计量

返回4维元组,*元素个数,*元素总和,*元素的平方和,*shift结果

参见算法介绍

tf.nn.normalize_moments(counts, mean_ss, variance_ss, shift, name=None)

基于完全统计量计算均值和方差

tf.nn.moments(x, axes, shift=None, 

name=None, keep_dims=False)

直接计算均值与方差

  • 损失函数(Losses)

操作

描述

tf.nn.l2_loss(t, name=None)

output = sum(t ** 2) / 2

  • 分类函数(Classification)

操作

描述

tf.nn.sigmoid_cross_entropy_with_logits

(logits, targets, name=None)*

计算输入logits, targets的交叉熵

tf.nn.softmax(logits, name=None)

计算softmax

softmax[i, j] = exp(logits[i, j]) / sum_j(exp(logits[i, j]))

tf.nn.log_softmax(logits, name=None)

logsoftmax[i, j] = logits[i, j] - log(sum(exp(logits[i])))

tf.nn.softmax_cross_entropy_with_logits

(logits, labels, name=None)

计算logits和labels的softmax交叉熵

logits, labels必须为相同的shape与数据类型

tf.nn.sparse_softmax_cross_entropy_with_logits

(logits, labels, name=None)

计算logits和labels的softmax交叉熵

tf.nn.weighted_cross_entropy_with_logits

(logits, targets, pos_weight, name=None)

与sigmoid_cross_entropy_with_logits()相似,

但给正向样本损失加了权重pos_weight

  • 符号嵌入(Embeddings)

操作

描述

tf.nn.embedding_lookup

(params, ids, partition_strategy=’mod’, 

name=None, validate_indices=True)

根据索引ids查询embedding列表params中的tensor值

如果len(params) > 1,id将会安照partition_strategy策略进行分割

1、如果partition_strategy为”mod”,

id所分配到的位置为p = id % len(params)

比如有13个ids,分为5个位置,那么分配方案为:

[[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8], [4, 9]]

2、如果partition_strategy为”div”,那么分配方案为:

[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]]

tf.nn.embedding_lookup_sparse(params, 

sp_ids, sp_weights, partition_strategy=’mod’, 

name=None, combiner=’mean’)

对给定的ids和权重查询embedding

1、sp_ids为一个N x M的稀疏tensor,

N为batch大小,M为任意,数据类型int64

2、sp_weights的shape与sp_ids的稀疏tensor权重,

浮点类型,若为None,则权重为全’1’

  • 循环神经网络(Recurrent Neural Networks)

操作

描述

tf.nn.rnn(cell, inputs, initial_state=None, dtype=None, 

sequence_length=None, scope=None)

基于RNNCell类的实例cell建立循环神经网络

tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, 

initial_state=None, dtype=None, parallel_iterations=None, 

swap_memory=False, time_major=False, scope=None)

基于RNNCell类的实例cell建立动态循环神经网络

与一般rnn不同的是,该函数会根据输入动态展开

返回(outputs,state)

tf.nn.state_saving_rnn(cell, inputs, state_saver, state_name, 

sequence_length=None, scope=None)

可储存调试状态的RNN网络

tf.nn.bidirectional_rnn(cell_fw, cell_bw, inputs, 

initial_state_fw=None, initial_state_bw=None, dtype=None,

sequence_length=None, scope=None)

双向RNN, 返回一个3元组tuple

(outputs, output_state_fw, output_state_bw)

— tf.nn.rnn简要介绍— 
cell: 一个RNNCell实例 
inputs: 一个shape为[batch_size, input_size]的tensor 
initial_state: 为RNN的state设定初值,可选 
sequence_length:制定输入的每一个序列的长度,size为[batch_size],值范围为[0, T)的int型数据 
其中T为输入数据序列的长度 

@针对输入batch中序列长度不同,所设置的动态计算机制 
@对于在时间t,和batch的b行,有 
(output, state)(b, t) = ? (zeros(cell.output_size), states(b, sequence_length(b) - 1)) : cell(input(b, t), state(b, t - 1))
  • 求值网络(Evaluation)

操作

描述

tf.nn.top_k(input, k=1, sorted=True, name=None)

返回前k大的值及其对应的索引

tf.nn.in_top_k(predictions, targets, k, name=None)

返回判断是否targets索引的predictions相应的值

是否在在predictions前k个位置中,

返回数据类型为bool类型,len与predictions同

  • 监督候选采样网络(Candidate Sampling)

对于有巨大量的多分类与多标签模型,如果使用全连接softmax将会占用大量的时间与空间资源,所以采用候选采样方法仅使用一小部分类别与标签作为监督以加速训练。

操作

描述

Sampled Loss Functions

 

tf.nn.nce_loss(weights, biases, inputs, labels, num_sampled,

num_classes, num_true=1, sampled_values=None,

remove_accidental_hits=False, partition_strategy=’mod’,

name=’nce_loss’)

返回noise-contrastive的训练损失结果

tf.nn.sampled_softmax_loss(weights, biases, inputs, labels, 

num_sampled, num_classes, num_true=1, sampled_values=None,

remove_accidental_hits=True, partition_strategy=’mod’, 

name=’sampled_softmax_loss’)

返回sampled softmax的训练损失

参考- Jean et al., 2014第3部分

Candidate Samplers

 

tf.nn.uniform_candidate_sampler(true_classes, num_true, 

num_sampled, unique, range_max, seed=None, name=None)

通过均匀分布的采样集合

返回三元tuple

1、sampled_candidates 候选集合。

2、期望的true_classes个数,为浮点值

3、期望的sampled_candidates个数,为浮点值

tf.nn.log_uniform_candidate_sampler(true_classes, num_true,

num_sampled, unique, range_max, seed=None, name=None)

通过log均匀分布的采样集合,返回三元tuple

tf.nn.learned_unigram_candidate_sampler

(true_classes, num_true, num_sampled, unique, 

range_max, seed=None, name=None)

根据在训练过程中学习到的分布状况进行采样

返回三元tuple

tf.nn.fixed_unigram_candidate_sampler(true_classes, num_true,

num_sampled, unique, range_max, vocab_file=”, 

distortion=1.0, num_reserved_ids=0, num_shards=1, 

shard=0, unigrams=(), seed=None, name=None)

基于所提供的基本分布进行采样

十一、保存与恢复变量

操作

描述

类tf.train.Saver(Saving and Restoring Variables)

 

tf.train.Saver.__init__(var_list=None, reshape=False, 

sharded=False, max_to_keep=5, 

keep_checkpoint_every_n_hours=10000.0, 

name=None, restore_sequentially=False,

saver_def=None, builder=None)

创建一个存储器Saver

var_list定义需要存储和恢复的变量

tf.train.Saver.save(sess, save_path, global_step=None, 

latest_filename=None, meta_graph_suffix=’meta’,

write_meta_graph=True)

保存变量

tf.train.Saver.restore(sess, save_path)

恢复变量

tf.train.Saver.last_checkpoints

列出最近未删除的checkpoint 文件名

tf.train.Saver.set_last_checkpoints(last_checkpoints)

设置checkpoint文件名列表

tf.train.Saver.set_last_checkpoints_with_time(last_checkpoints_with_time)

设置checkpoint文件名列表和时间戳

 

参考:[1] https://www.cnblogs.com/focusonepoint/p/7544369.html

以上是关于Blender2.8正式版基础(一)基础操作与常用快捷键的主要内容,如果未能解决你的问题,请参考以下文章

Blender 2.8 中的渲染输出显示与视口显示不同的输出

基础方法 | 如何用R语言做回归诊断:原理与操作

TensorFlow基础——常用函数

4TensorFlow基础常用API与变量作用域

Linux笔记:命令基础说明与常用命令

我的第一本书《FFmpeg音视频开发基础与实战》已正式出版