tfboys——tensorflow模块学习(二)
tf.contrib模块
tf.contrib 模块是一个比较复杂的模块。
contrib细节:
tf.contrib.bayesflow.entropy 香农信息论
tf.contrib.bayesflow.monte_carlo Monte Carlo integration 蒙特卡洛积分
tf.contrib.bayesflow.stochastic_graph Stochastic Computation Graphs 随机计算图
tf.contrib.bayesflow.stochastic_tensor 随机张量
tf.contrib.bayesflow.variational_inference 变分推断
tf.contrib.crf CRF layer 条件随机场(conditional random field)
tf.contrib.ffmpeg ffmeg编解码音频
tf.contrib.framework 参数范围、变量、检查点
tf.contrib.graph_editor 运行时修改计算图
tf.contrib.integrate.odeint ode解常微分方程
tf.contrib.layers 构建层、正则化、初始化、优化、Feature columns(数据与模型之间进行映射)
tf.contrib.learn 高级学习库
tf.contrib.linalg 线性代数(矩阵)
tf.contrib.losses 损失函数
tf.contrib.metrics度量标准
tf.contrib.distributions概率分布
tf.contrib.rnn rnn相关
tf.contrib.seq2seq 基于rnn,实现编解码器
tf.contrib.staging.StagingArea 添加管线
tf.contrib.training mini batch和组(bucket)
tf.contrib.util
tf.contrib.nn Sampling 裁剪 信息熵
tf.contrib.bayesflow.entropy.elbo_ratio(估计ELBO和KL散度中出现的比值)
elbo_ratio (
log_p ,
q ,
z = None ,
n = None ,
seed = None ,
form = None ,
name = 'elbo_ratio'
)定义在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py。
参见指南:贝叶斯熵(contrib)>操作
估计 ELBO 和 KL 散度中出现的比值
随着 p(z) := exp{log_p(z)} ,该操作返回一个近似值:
E_q [ Log [ p ( Z ) / q ( Z )] ]术语 E_q[ Log[p(Z)] ] 总是被计算为样本平均值。术语 E_q[ Log[q(Z)] ] 可以用样本计算,或者定义了 q.entropy() 的精确公式,可以使用精确的公式计算。这是由 kwarg 形式控制的。
该对数比出现在不同的上下文中:
KL[q || p]
如果 log_p(z) = Log[p(z)] 分配 p,该操作近似计算负的 Kullback-Leibler 散度。
elbo_ratio ( log_p , q , n = 100 ) = - 1 * KL [ q | | p ] ,
KL [ q | | p ] = E [ Log [ q ( Z )] - Log [ p ( Z )] ]请注意,如果 p 是一个 Distribution,那么 distributions.kl_divergence(q, p) 可能会被确定并作为确切可用的结果。
ELBO
如果 log_p (z) = log [p (z, x)] 是一个分布 p 的日志连接, 这是证据下限 (ELBO):
ELBO 〜= E[Log[ p(Z,X)] - Log[q(Z)]]
= Log[p(X)]-KL[q||p]
<= Log [p(x)]用户提供 Tensor 样品 z ,或样品数量来绘制 n。
ARGS:
- log_p:从可调用映射样本 q 到 Tensors 具有形状 broadcastable 到 q.batch_shape。例如,log_p “就像” q.log_prob 一样工作。
- q:tf.contrib.distributions.Distribution。
- z:Tensor 样品来自q,由 q.sample(n) 某些 n 生成。
- n:整数 Tensor。如果 z 不提供则生成样本数。
- seed:Python整数来生成随机数生成器。
- form:ELBOForms.analytic_entropy(使用熵的公式q)或 ELBOForms.sample(熵的样本估计),或 ELBOForms.default(尝试分析熵,样本回退)。默认值为ELBOForms.default。
- name:给这个操作起的名字。
返回:
标量张量持有样本平均 KL 散度。形状是 q 的批次形状, dtype 与 q 相同。
举:
- ValueError:如果form没有被这个功能处理。
tf.contrib.bayesflow.entropy.entropy_shannon 计算Monte Carlo或Shannon熵的确定性
entropy_shannon (
p ,
z = None ,
n = None ,
seed = None ,
form = None ,
name = 'entropy_shannon'
)定义在:tensorflow/contrib/bayesflow/python/ops/entropy_impl.py
参见指南:贝叶斯熵(contrib)>操作
蒙特卡罗或香农熵的确定性计算。
根据 kwarg form,该操作返回分布的分析熵 p 或采样熵:
- n ^ { - 1 } sum_ {i = 1 }^n p.log_prob( z_i ), where z_i 〜 p ,
\approx- E_p [Log[ p(Z)]]
=Entropy[p]用户提供的任何一个样本 z 张量, 或一定数量的样本来绘制 n。
ARGS:
- p: tf.contrib.distributions.Distribution
- z:Tensor 样品来自 p,由 p.sample(n) 某些产生 n。
- n:整数 Tensor。如果未提供 z, 则生成的样本数。
- seed:Python 整数用来寻找随机数生成器。
- form:要么 ELBOForms. analytic_entropy (使用公式熵的 q) 或 ELBOForms. sample (熵的抽样估计),或 ELBOForms. default (尝试分析熵, 在样本上返回)。默认值为 ELBOForms.default。
- name:给该操作的一个名字。
返回:
与 p 相同的 dtype 的张量,并且形状等于 p. batch_shape。
举:
- ValueError:如果 form 没有由这个函数处理。
- ValueError:如果 form 是 ELBOForms. analytic_entropy 和 n 被提供。
tf.contrib.bayesflow.entropy.renyi_alpha
renyi_ratio (
log_p ,
q ,
alpha ,
z = None ,
n = None ,
seed = None ,
name = 'renyi_ratio'
)定义在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py
参见指南:贝叶斯熵(contrib)>操作
使用 Monte Carlo 估计出现在 Renyi 分歧中的比率。
这可以用于计算 Renyi(alpha)分歧,或者基于 Renyi 分歧的日志痕迹近似值。
定义
用 z_i 独立同分布样品 q,和 exp{log_p(z)} = p(z),这操作返回查看(偏向有限个 n)估计:
(1 -alpha)^ { - 1 } Log[ n^{- 1} sum_ {i = 1 } ^ n ( p(z_i)/q(z_i))^ {1-alpha}
\approx(1-alpha)^ {- 1 } Log[ E_q [( p(Z)/q(Z))^ { 1 - alpha }]]该比例出现在不同的上下文中:
Renyi 分歧
如果 log_p(z) = Log[p(z)] 是分配的日志概率,并且 alpha > 0,alpha != 1 ,那么该操作近似于 -1 倍仁义分歧:
# 选择合理的高 n 来限制偏移,见下文
renyi_ratio ( log_p , q ,alpha,n = 100 )
\approx - 1 * D_alpha [ q || p ] ,where
D_alpha [ q || p ] := (1 - alpha)^ {-1} Log E_q [(p(Z)/q(Z))^ { 1 - alpha} ]Renyi(或 “alpha”)的分歧是非负数,并且当且仅当 q = p 时它等于零;alpha 的各种限制导致不同的特殊情况:
alpha D_alpha[q||p]
----- ---------------
-- > 0 Log[int_ {q >0} p(Z)dz]
= 0.5 , -2 Log[ 1- Hel^ 2[q||p]] ,(\propto squared Hellinger distance)
-- > 1 KL[q||p]
= 2 Log[1 + chi ^ 2[q||p]] ,(\propto squared Chi - 2 divergence )
-- > infty Log[max_z{q(z)/ p(z)}] ,(min description length principle)。对数证据近似
如果 log_p (z) = log [p (z, x)] 是联合分布 p 的日志,这是在变分推理中常见的 ELBO 的一种替代方法。
L_alpha( q ,p )= Log[p(X)] - D_alpha[q||p]如果 q 和 p 有同样的支持,并且 0 < a <= b < 1,则可以显示出 ELBO <= D_b <= D_a <= Log[p(x)]。因此,该操作允许 ELBO 和真实证据之间进行平滑的插值。
稳定性说明
请注意,当 1 - alpha 值不小的时候,比例 (p(z) / q(z))^{1 - alpha} 会受到下溢/溢出问题的影响。因此,它在集中后在对数空间中进行评估。尽管如此,infinite / NaN 的结果还是会出现。为此,人们可能希望 alpha 逐渐缩小,见操作 renyi_alpha;使用 float64 也将有所帮助。
有限样本量的偏差
由于对数的非线性,对于随机变量{X_1,...,X_n},有 E[ Log[sum_{i=1}^n X_i] ] != Log[ E[sum_{i=1}^n X_i] ]。结果,这个估计是有限偏移的 n。对于 alpha < 1 ,它是不减少的 n(预期中)。例如,如果 n = 1,此估计器产生与 elbo_ratio 相同的结果,并且当 n 增加的时候,估计的预期值也增加。
呼叫签名
用户提供 Tensor 样品 z 或 样品数量来绘制 n。
ARGS:
- log_p:从可调用映射样本 q 到具有形状 broadcastable 的 Tensors 再到 q.batch_shape。例如,log_p “就像” q.log_prob 一样工作。
- q:tf.contrib.distributions.Distribution;log_p 和 q 应在同一组中得到支持。
- alpha:张量与形状 q. batch_shape 和的值不等于1。
- z:来自 p 的样品张量,由 p.sample 从一些 n 生成。
- n:整数张量;未提供 z 时要使用的样本数。请注意,这可能是高度偏移的小 n, 见字符串。
- seed:随机数生成器的 Python 整数。
- name:给该操作提供一个名字。
返回:
- renyi_result:样本的缩放对数平均值。形状张量等于 q 的批次形状,并且 dtype= q.dtype。
tf.contrib.bayesflow.entropy.renyi_ratio 计算Renyi分歧
renyi_ratio (
log_p ,
q ,
alpha ,
z = None ,
n = None ,
seed = None ,
name = 'renyi_ratio'
)定义在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py
参见指南:贝叶斯熵(contrib)>操作
使用 Monte Carlo 估计出现在 Renyi 分歧中的比率。
这可以用于计算 Renyi(alpha)分歧,或者基于 Renyi 分歧的日志痕迹近似值。
定义
用 z_i 独立同分布样品 q,和 exp{log_p(z)} = p(z),这操作返回查看(偏向有限个 n)估计:
(1 -alpha)^ { - 1 } Log[ n^{- 1} sum_ {i = 1 } ^ n ( p(z_i)/q(z_i))^ {1-alpha}
\approx(1-alpha)^ {- 1 } Log[ E_q [( p(Z)/q(Z))^ { 1 - alpha }]]该比例出现在不同的上下文中:
Renyi 分歧
如果 log_p(z) = Log[p(z)] 是分配的日志概率,并且 alpha > 0,alpha != 1 ,那么该操作近似于 -1 倍仁义分歧:
# 选择合理的高 n 来限制偏移,见下文
renyi_ratio ( log_p , q ,alpha,n = 100 )
\approx - 1 * D_alpha [ q || p ] ,where
D_alpha [ q || p ] := (1 - alpha)^ {-1} Log E_q [(p(Z)/q(Z))^ { 1 - alpha} ]Renyi(或 “alpha”)的分歧是非负数,并且当且仅当 q = p 时它等于零;alpha 的各种限制导致不同的特殊情况:
alpha D_alpha[q||p]
----- ---------------
-- > 0 Log[int_ {q >0} p(Z)dz]
= 0.5 , -2 Log[ 1- Hel^ 2[q||p]] ,(\propto squared Hellinger distance)
-- > 1 KL[q||p]
= 2 Log[1 + chi ^ 2[q||p]] ,(\propto squared Chi - 2 divergence )
-- > infty Log[max_z{q(z)/ p(z)}] ,(min description length principle)。对数证据近似
如果 log_p (z) = log [p (z, x)] 是联合分布 p 的日志,这是在变分推理中常见的 ELBO 的一种替代方法。
L_alpha( q ,p )= Log[p(X)] - D_alpha[q||p]如果 q 和 p 有同样的支持,并且 0 < a <= b < 1,则可以显示出 ELBO <= D_b <= D_a <= Log[p(x)]。因此,该操作允许 ELBO 和真实证据之间进行平滑的插值。
稳定性说明
请注意,当 1 - alpha 值不小的时候,比例 (p(z) / q(z))^{1 - alpha} 会受到下溢/溢出问题的影响。因此,它在集中后在对数空间中进行评估。尽管如此,infinite / NaN 的结果还是会出现。为此,人们可能希望 alpha 逐渐缩小,见操作 renyi_alpha;使用 float64 也将有所帮助。
有限样本量的偏差
由于对数的非线性,对于随机变量{X_1,...,X_n},有 E[ Log[sum_{i=1}^n X_i] ] != Log[ E[sum_{i=1}^n X_i] ]。结果,这个估计是有限偏移的 n。对于 alpha < 1 ,它是不减少的 n(预期中)。例如,如果 n = 1,此估计器产生与 elbo_ratio 相同的结果,并且当 n 增加的时候,估计的预期值也增加。
呼叫签名
用户提供 Tensor 样品 z 或 样品数量来绘制 n。
ARGS:
- log_p:从可调用映射样本 q 到具有形状 broadcastable 的 Tensors 再到 q.batch_shape。例如,log_p “就像” q.log_prob 一样工作。
- q:tf.contrib.distributions.Distribution;log_p 和 q 应在同一组中得到支持。
- alpha:张量与形状 q. batch_shape 和的值不等于1。
- z:来自 p 的样品张量,由 p.sample 从一些 n 生成。
- n:整数张量;未提供 z 时要使用的样本数。请注意,这可能是高度偏移的小 n, 见字符串。
- seed:随机数生成器的 Python 整数。
- name:给该操作提供一个名字。
返回:
- renyi_result:样本的缩放对数平均值。形状张量等于 q 的批次形状,并且 dtype= q.dtype。
tf.contrib.bayesflow.monte_carlo.expectation
expectation(
f ,
p ,
z = none,
n = none,
seed = none,
name = 'expectation'
)定义在tensorflow/contrib/bayesflow/python/ops/monte_carlo_impl.py。
参见指南:贝叶斯蒙特卡罗(contrib)>行动
蒙特卡罗估计的期望:E_p[f(Z)] 与样本具有均值。
该操作返回:
n ^ { - 1 } sum_ {i= 1 } ^ n f( z_i ),where z_i 〜 p
\approx E_p[f(Z)]ARGS:
- f:从 p 到张量的可调用映射样本。
- p:tf.contrib.distributions.Distribution。
- z:p 样品的张量,由 p.sample 为一些 n 生成。
- n:整数张量。如果未提供z生成的样本数。
- seed:Python整数来寻找随机数程序。
- name:为该操作提供一个名字。
返回:
与一个 Tensor 具有相同 dtype 的 p,举例:
N_samples = 10000
distribute = tf.contrib.distributions
dist =distributions.Uniform([ 0.0,0.0 ] ,[1.0,2.0])
elementwise_mean = lambda x :x
mean_sum = lambda x : tf.reduce_sum(x ,1)
estimate_elementwise_mean_tf = monte_carlo.expectation( elementwise_mean ,
dist ,
n = N_samples )
estimate_mean_sum_tf = monte_carlo.expectation( mean_sum ,
dist ,
n = N_samples )
with tf.Session()as sess :
estimate_elementwise_mean , estimate_mean_sum = (
sess.run([estimate_elementwise_mean_tf ,estimate_mean_sum_tf]))
print estimate_elementwise_mean
>>> np.array([0.50018013 1.00097895 ] ,dtype=np. float32 )
print estimate_mean_sum
>>> 1.49571
tf.contrib.bayesflow.monte_carlo.expectation_importance_sampler 重要性抽样估计
expectation_importance_sampler (
f ,
log_p ,
sampling_dist_q ,
z = None ,
n = None ,
seed = None ,
name = 'expectation_importance_sampler'
)定义在tensorflow/contrib/bayesflow/python/ops/monte_carlo_impl.py。
参见指南:贝叶斯蒙特卡罗(contrib)>行动
蒙特卡罗估计 E_p[f(Z)] = E_q[f(Z) p(Z) / q(Z)]。
随着 p(z) := exp{log_p(z)},这Op返回
n ^ { - 1 } sum_ {i= 1 } ^ n[ F ( z_i ) p ( z_i ) / q ( z_i ) ] ,z_i 〜 q ,
\approx E_q [ F (Z) p (Z) / q (Z) ]
= E_p [ f ( Z )]这个积分是通过最大减法在对数空间中完成的,以更好地处理 f(z) p(z) / q(z)可能承受的极端值。
如果 f >= 0,将 expectation_importance_sampler_logspace 应用的结果取幂,则效率高达2倍 Log[f]。
用户提供的任何一个样本 z 张量, 或样本数绘制 n
ARGS:
- f:从可调用映射样本 sampling_dist_q 到具有形状 broadcastable 的 Tensors 到 q.batch_shape。例如,f “就像” q.log_prob 一样工作。
- log_p:从可调用映射样本 sampling_dist_q 到具有形状 broadcastable 的 Tensors 到 q.batch_shape。例如,log_p “就像” sampling_dist_q.log_prob 一样工作。
- sampling_dist_q:抽样分布。tf.contrib.distributions.Distribution。log_p 和 q 应在同一组中得到支持。
- z:p 样品的张量,由 p.sample 为一些 n 生成。
- n:整数张量。如果未提供z生成的样本数。
- seed:Python整数来寻找随机数程序。
- name:为该操作提供一个名字。
返回:
重要性抽样估计。形状张量等于 q 的批次形状,并且 dtype= q.dtype。
tf.contrib.bayesflow.monte_carlo.expectation_importance_sampler_logspace 对数空间的重要性抽样估计
expectation_importance_sampler_logspace (
log_f ,
log_p ,
sampling_dist_q ,
z = None ,
n = None ,
seed = None ,
name = 'expectation_importance_sampler_logspace'
)定义在tensorflow/contrib/bayesflow/python/ops/monte_carlo_impl.py。
参见指南:贝叶斯蒙特卡罗(contrib)>行动
在对数空间中具有正函数的重要性抽样。
随着 p(z) := exp{log_p(z)},而且 f(z) = exp{log_f(z)},该操作返回:
Log[ n ^ { - 1 } sum_ {i = 1 } ^ n [ F( z_i ) p( z_i )/q(z_i)]] ,z_i 〜 q ,
\approx Log[ E_q [ F ( Z ) p (Z ) / q ( Z ) ] ]
= Log[ E_p [ f ( Z )] ]这个积分是通过最大减法在对数空间中完成的,以更好地处理 f(z) p(z) / q(z) 可能承受的极端值。
和 expectation_importance_sampler 相反,该操作将返回对数空间中的值。
用户提供的任何一个样本 z 张量, 或样本数绘制 n。
ARGS:
- log_f:从可调用映射样本 sampling_dist_q 到具有形状 broadcastable 的 Tensors 到 q.batch_shape。例如,log_f “就像” sampling_dist_q.log_prob一样工作。
- log_p:从可调用映射样本 sampling_dist_q 到具有形状 broadcastable 的 Tensors 到 q.batch_shape。例如,log_p “就像” q.log_prob 一样工作。
- sampling_dist_q:抽样分布。tf.contrib.distributions.Distribution。log_p 和 q 应在同一组中得到支持。
- z:p 样品的张量,由 p.sample 为一些 n 生成。
- n:整数张量。如果未提供z生成的样本数。
- seed:Python整数来寻找随机数程序。
- name:为该操作提供一个名字。
返回:
重要性抽样估计的对数。形状张量等于 q 的批次形状, 并且 dtype = q. dtype。
tf.contrib.bayesflow.stochastic_graph.surrogate_loss 随机图的代理损失
surrogate_loss (
sample_losses ,
stochastic_tensors = None ,
name = 'SurrogateLoss'
)定义在:tensorflow/contrib/bayesflow/python/ops/stochastic_graph_impl.py
参考指南:BayesFlow随机图(contrib)>随机计算图形辅助函数
随机图的代理损失。
这个函数将调用 loss_fn 在每个 StochasticTensor 上游的 sample_losses,传递其影响的损失。
请注意,目前的 surrogate_loss 并不能与在 while_loops 或其他控制结构中实例化的 stochastictenUNK 一起工作。
ARGS:
- sample_losses:最后损失的列表或元组。每一次损失应在批次 (可能每个样品) 的例子;那就是, 它应该有1或更大的维度。所有损失应具有相同的形状。
- stochastic_tensors:StochasticTensor 用于添加损失条款的列表。如果没有, 则默认为 sample_losses 中张量的图上游所有的 StochasticTensors。
- name:用于准备创建操作的名称。
返回:
张量损失,是 sample_losses 和 StochasticTensors 返回的 loss_fns 的总和。
注意:
- TypeError:如果 sample_losses 不是列表或元组,并且它的元素不是张量。
- ValueError:如果 sample_losses 的任何损失都没有维度1或更大。
tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor 发出随机值的张量
tf.contrib.bayesflow.stochastic_tensor.BaseStochasticTensor 类
定义在:tensorflow/contrib/bayesflow/python/ops/stochastic_tensor_impl.py。
参见指南:BayesFlow随机张量(contrib)>随机张量类
用于发出随机值的张量对象的基类。
属性
- dtype
- graph
- name
方法
- __init__
__init__ ()- loss
loss( sample_loss )返回添加到代理损失中的术语。
这个方法被 surrogate_loss 调用。输入 sample_loss 应该已经应用了 stop_gradient。这是因为 surrogate_loss 通常提供了一个 Monte Carlo 样例术语 differentiable_surrogate * sample_loss,其中 sample_loss 被认为是常量,因为它的目的是梯度输入。
ARGS:
- sample_loss:张量,在这个 StochasticTensor 的下游样本损失。
返回:
要么返回 None ,要么返回 Tensor。
value
value( name = None )
参考文献:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-1i7f2c8z.html
tfboys——tensorflow模块学习(二)的更多相关文章
- tfboys——tensorflow模块学习(三)
tf.estimator模块 定义在:tensorflow/python/estimator/estimator_lib.py 估算器(Estimator): 用于处理模型的高级工具. 主要模块 ex ...
- tfboys——tensorflow模块学习(一)
Tensorflow的基本使用 TensorFlow 的特点: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使用 tens ...
- tfboys——tensorflow模块学习(四)
tensorflow功能函数 tf.abs 计算张量的绝对值 abs ( x , name = None ) 定义在:tensorflow/python/ops/math_ops.py. 参考指南:数 ...
- Python urllib和urllib2模块学习(二)
一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...
- Python3 学习第九弹: 模块学习二之文件管理模块
os模块 提供访问操作系统的接口 1> name 获得当前操作系统 其中 'nt' 是 windows 'posix' 是 linux 2> environ 获得当前系统的环境变量的字典, ...
- python模块学习(二)
configparser模块 软件常见文档格式如下: [DEFAULT]ServerAliveInterval = 45Compression = yesCompressionLevel = 9For ...
- gevent模块学习(二)
2. Queue类,常用用于Greenlet之间的异步共享 q = gevent.queue.Queue(maxsize=None, items=None) -> Queue 说明: 创建一个指 ...
- nodejs的mysql模块学习(二)连接数据库
nodejs连接mysql的方式有两种 官方建议的第一种是 let mysql = require('mysql'); let connection = mysql.createConnection( ...
- Python学习 :常用模块(二)
常用模块(二) 四.os模块 os模块是与操作系统交互的一个接口,用于对操作系统进行调用 os.getcwd() # 提供当前工作目录 os.chdir() # 改变当前工作目录 os.curdir( ...
随机推荐
- Silverlight实例教程 - Validation用户提交数据验证捕获(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- Atitit.aticmd v4 新特性q39 添加定时器释放功能
Atitit.aticmd v4 新特性q39 添加定时器释放功能 V1 实现兰cmd V2 标准输入,标准输出,标准错误与重新定向 V3 stdout stderr统一重新定向 V4 添加定 ...
- gcc -M -MM -MQ -MF -MT -MD
静态模式规则对一个较大工程的管理非常有用.它可以对整个工程的同一类文件的重建规则进行一次定义,而实现对整个工程中此类文件指定相同的重建规则.比如,可以用来描述整个工程中所有的.o 文件的依赖规则和编译 ...
- 李洪强iOS开发之OC语言前期准备
OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...
- C#中基本类型占用字节数
bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ...
- HTTP协议之http状态码详解
什么是HTTP状态码 HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事. 状态码位于HTTP Response 的第一行中,会返回一个”三位数字的状态码“和一个“状态消息”. ”三位数 ...
- IOS设计模式浅析之适配器模式(Adapter)
引言 在项目开发中,有时候会遇到这样的一种情景:需要使用以前开发的“一些现存的对象”,但是新环境中要求的接口是这些现存对象所不满足的.怎样应对这种迁移的需求?使得可以复用这些对象,以满足新的应用环境, ...
- tinyint(4),tinyint(80)有什么区别
tinyint格式: TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4 Tinyint占用1字节的存储空间,即8位(bit). 带符号的范围是-128到127.无符号的 ...
- unity 多选枚举
首先是自定义 using UnityEngine; using System.Collections; using UnityEditor; public class EnumFlagsAttribu ...
- 第二章----python函数
第一节:调用函数 1.函数是什么? 函数是组织好的,可以重复利用的. 2.为什么要用到函数? 提高应用的模块性,提高重复利用率.指的是:多个文件中可能都要用到该函数,直接拿来调用就行,不用在重复写一个 ...