tf.nn.embedding_lookup()
# tf.nn.embedding_lookup(
# params, 表示完整的嵌入张量,或者除了第一维度之外具有相同形状的P个张量的列表,表示经分割的嵌入张量
# ids, 一个类型为int32或int64的Tensor,包含要在params中查找的id
# partition_strategy='mod',指定分区策略的字符串,如果len(params)> 1,则相关。当前支持“div”和“mod”。 默认为“mod”
# name=None, 操作名称(可选)
# validate_indices=True, 是否验证收集索引
# max_norm=None) 如果不是None,嵌入值将被l2归一化为max_norm的值
import tensorflow as tf
import numpy as np
c = np.random.random([5,1])
# 随机生成一个5*1的数组
b = tf.nn.embedding_lookup(c, [1, 3])
# 查找数组中的序号为1和3的
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(b))
print(c)
tf.Graph() 和tf.Session()
tf.Graph()表示实例化一个用于tensorflow计算和表示用的数据流图,不负责运行计算。通俗来讲就是:在代码中添加的操作(画中的结点)和数据(画中的线条)都是画在纸上的“画”,而图就是呈现这些画的纸,你可以利用很多线程生成很多张图,但是默认图就只有一张。
tf.Session() 主要用于执行网络。所有关于神经网络的计算都在这里进行,它执行的依据是计算图或者计算图的一部分,同时,会话也会负责分配计算资源和变量存放,以及维护执行过程中的变量。
# 默认计算图上的操作
a = tf.constant([1.0, 2.0])
b = tf.constant([2.0, 3.0])
result = a + b
# 定义两个计算图
g1 = tf.Graph()
g2 = tf.Graph()
# 在g1中定义张量和操作
with g1.as_default():
a = tf.constant([1.0, 1.0])
b = tf.constant([1.0, 1.0])
result1 = a + b
# 在g2中定义张量和操作
with g2.as_default():
a = tf.constant([2.0, 2.0])
b = tf.constant([2.0, 2.0])
result2 = a + b
# 创建会话
with tf.Session(graph=g1) as sess:
out = sess.run(result1)
print(out)
with tf.Session(graph=g2) as sess:
out = sess.run(result2)
print(out)
with tf.Session(graph=tf.get_default_graph()) as sess:
out = sess.run(result)
print(out)
tf.random_normal_initializer()
tf.random_normal_initializer(mean=0.0, stddev=1.0, seed=None, dtype=tf.float32)
#生成具有正态分布的张量的初始化器
tf.get_variable()
# tf.get_variable(name,shape,dtype,initializer,trainable)
# name:名称
# shape:数据形状。
# dtype:数据类型。常用的tf.float32,tf.float64等数值类型
# initializer:初始化值。可以使用各种初始化方法
# trainable:是否训练变量。bool类型:True训练,False不训练
a1 = tf.get_variable(name='a1', shape=[2,3], initializer=tf.random_normal_initializer(mean=0, stddev=1))
a2 = tf.get_variable(name='a2', shape=[1], initializer=tf.constant_initializer(1))
a3 = tf.get_variable(name='a3', shape=[2,3], initializer=tf.ones_initializer())
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print (sess.run(a1))
print (sess.run(a2))
print (sess.run(a3))
#initializer 初始化方法
#tf.constant_initializer:常量初始化函数
#tf.random_normal_initializer:正态分布
#tf.truncated_normal_initializer:截取的正态分布
#tf.random_uniform_initializer:均匀分布
#tf.zeros_initializer:全部是0
#tf.ones_initializer:全是1
#tf.uniform_unit_scaling_initializer:满足均匀分布,但不影响输出数量级的随机值
tf.reduce_sum()
张量沿着某一个维度的和
#tf.reduce_sum(
# input_tensor, 待求和tensor
# axis=None, 指定的维度,如果不指定,则计算所有元素的和
# keepdims=None, 是否保持原有张量的维度,设置为True,结果保持输入tensor的形状,设置为False,结果会降低维度,如果不传入这个参数,则系统默认为False;
# name=None, 操作的名称;
# keepdims=None) 是否保持原张量的维度
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
u=tf.reduce_sum(v,axis=1)
print(sess.run(u))
其他类似函数
tf.reduce_mean():计算tensor指定轴方向上的所有元素的平均值;
tf.reduce_max():计算tensor指定轴方向上的各个元素的最大值;
tf.reduce_all():计算tensor指定轴方向上的各个元素的逻辑和(and运算);
tf.reduce_any():计算tensor指定轴方向上的各个元素的逻辑或(or运算);
tf.add_n()
tf.add_n() 将list中的数值相加
import tensorflow as tf
x = tf.constant([2,4])
sess = tf.Session()
print(sess.run(tf.add_n([x, x])))
# [ 4 8 ]