tensorflow constant placeholder feed_dictVariable

亡梦爱人 提交于 2020-03-06 10:23:50

tf.constant

tf.constant() 返回的 tensor 是一个常量,因为这个 tensor 的值不会变

tf.placeholder 和 feed_dict

tf.placeholder 用于将普通类型,转化为 tensor 类型
feed_dict 表示投喂字典,格式为 {tensor_type: value},其中 tensor_type 表示 tensor 类型,value 表示对应的值,用于具体的计算

softmax_data = [0.7, 0.2, 0.1]
one_hot_data = [1.0, 0.0, 0.0]

# 将 float 类型转化为 tensor 类型
softmax = tf.placeholder(tf.float32)
one_hot = tf.placeholder(tf.float32)

# TODO: Print cross entropy from session
# 传给 tf.multiply 的参数是两个 tensor 类型,而不是具体的值,
# 具体的值在 sess.run() 时,在 feed_dict 中提供
cross_entropy = -tf.reduce_sum(tf.multiply(one_hot, tf.log(softmax)))

with tf.Session() as sess:
	# cross_entropy 需要两个类型的数据,在 feed_dict 中提供了
    print(sess.run(cross_entropy, feed_dict={softmax: softmax_data, one_hot: one_hot_data}))

按:
tf 是一个
类型转换器(tf.placeholder()),
函数提供器(tf.reduce_sumtf.multiplytf.log),
线程提供器(tf.Session

tf.Variable

tf.Variable用于创建一个可变 tensor,初始值可以被改变。该 tensor 把它的状态存在可变 tensor 里,使用 tf.global_variables_initializer() 来初始化。

init = tf.global_variables_initializer()
with tf.Session() as sess:
	sess.run(init)

tf.Variable类可以让我们改变权重和偏差,但还是需要选择一个初始值。从正态分布中取随机数来初始化权重是个好习惯。

weights = tf.Variables(tf.truncated_normal((n_features, n_labels)))

将偏差简单得设为 0,或者用随机数

bias = tf.Variable(tf.zeros(n_labels))
# 或者
bias =tf.Variable(tf.random_normal([n_class]))

按:对于分类问题,从训练样本(X, y) 到 权重参数(W, b) 之间的映射关系如下:
X 的特征数为 n_features = X.shape[1],y 的取值空间为 n_labels = y.unique(),则

weights.shape == [n_features, y.unique()]; 
bias.shape == (y_unique(), )
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!