代码之家  ›  专栏  ›  技术社区  ›  Devin Haslam

Tensorflow偏差和权重变量

  •  1
  • Devin Haslam  · 技术社区  · 7 年前

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

    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)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   javidcf    7 年前

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

    • A. tf.global_variables_initializer 活动
    • 一个新的 session .
    • 在会话中运行变量初始值设定项操作。这将为变量提供初始值。请注意,此初始值的性质将取决于创建变量时选择的初始值设定项(零、随机法线等)。
    • train\u步骤 使用您的培训数据,直到 cross\u熵 具有“足够好”的值。每次这样做时,变量的值都会发生一些变化,以使模型与数据相适应。

    所以实际上,变量发生的一切或多或少都是显式的。你可以选择用它们做任何其他事情,你可以有一些不可训练的变量,例如,你可以添加正则化子,等等。