【问题标题】:Tensorflow bias and weight variable张量流偏差和权重变量
【发布时间】:2018-07-27 16:11:13
【问题描述】:

我创建了一个用于像素分类的深度卷积神经网络。我的训练图像大小为 32x32x7,因此数字 7168 被大量使用。下面你可以看到我的模型被权重和偏差重塑和修改的最终结果。我对这个权重和偏见有点困惑。 在模型训练期间会自动调整权重和偏差吗?我从不为这些变量赋值,所以我假设 train_step 会根据交叉熵分数修改它们。这是正确的吗?

final = tf.add(add1,add2)
final = tf.reshape(final, [-1, 7168])

W_final = weight_variable([7168,7168,3])
b_final = bias_variable([7168,3])
final_conv = tf.tensordot(final, W_final, axes=[[1], [1]]) + b_final

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_,  logits=final_conv))
train_step = tf.train.AdamOptimizer(1e-5, epsilon = .1).minimize(cross_entropy)

【问题讨论】:

  • weight_variablebias_variable 是什么,它们是你的函数或类还是别的什么?

标签: python tensorflow deep-learning conv-neural-network


【解决方案1】:

您在模型中创建的变量会发生什么取决于您对它们执行的操作。正如您所指出的,TensorFlow 的典型用例是根据一些损失分数(在您的情况下为交叉熵)自动调整(“训练”)它们。您有张量 cross_entropy 计算损失,train_step 是一种优化操作,根据某些规则更新模型中的可训练变量(默认情况下,您创建的变量是可训练的,除非指定了 trainable=Falsecross_entropy 的值。除此之外,您还需要:

  • tf.global_variables_initializer 操作。
  • 一个新的session
  • 在会话中运行变量初始化器操作。这将为您的变量提供初始值。请注意,此初始值的性质将取决于您在创建变量时选择的初始化程序(零、随机正态等)。
  • 使用您的训练数据运行train_step,直到cross_entropy 具有“足够好”的值。每次执行此操作时,变量的值都会发生一些变化,以使模型适合数据。

所以实际上发生在变量上的所有事情都或多或少是明确的。而且你可以选择对它们做任何其他事情,你可以有一些不可训练的变量,例如,你可以添加正则化器等。

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2017-02-26
    • 2017-09-14
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多