我已经为像素分类创建了一个深度卷积神经网络。我的训练图像尺寸为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)
答案 0 :(得分:2)
您在模型中创建的变量会发生什么变化取决于您对它们的处理方式。正如您所指出的,TensorFlow的典型用例是根据一些损失分数自动调整(“训练”),在您的情况下是交叉熵。您有计算损失的张量cross_entropy
和train_step
,这是一个更新模型中可训练变量的优化操作(默认情况下,您创建的变量是可训练的,除非指定trainable=False
根据某些规则,取决于cross_entropy
的值。除此之外,您还需要:
tf.global_variables_initializer
操作。train_step
,直到cross_entropy
具有“足够好”的值。每次执行此操作时,变量的值都会稍微改变,以使模型适合数据。所以实际上变量发生的一切都或多或少都是明确的。你可以选择用它们做任何其他事情,你可以有一些不可训练的变量,例如,你可以添加正则化器等。