当前位置:  开发笔记 > 人工智能 > 正文

TensorFlow培训

如何解决《TensorFlow培训》经验,为你挑选了1个好方法。

假设我有一个非常简单的神经网络,如多层感知器.对于每一层,激活功能是S形的,并且网络是完全连接的.

在TensorFlow中,这可能是这样定义的:

    sess = tf.InteractiveSession()

    # Training Tensor
    x = tf.placeholder(tf.float32, shape = [None, n_fft])
    # Label Tensor
    y_ = tf.placeholder(tf.float32, shape = [None, n_fft])

    # Declaring variable buffer for weights W and bias b
    # Layer structure [n_fft, n_fft, n_fft, n_fft]
    # Input -> Layer 1
    struct_w = [n_fft, n_fft]
    struct_b = [n_fft]
    W1 = weight_variable(struct_w, 'W1')
    b1 = bias_variable(struct_b, 'b1')
    h1 = tf.nn.sigmoid(tf.matmul(x, W1) + b1)

    # Layer1 -> Layer 2
    W2 = weight_variable(struct_w, 'W2')
    b2 = bias_variable(struct_b, 'b2')
    h2 = tf.nn.sigmoid(tf.matmul(h1, W2) + b2)

    # Layer2 -> output
    W3 = weight_variable(struct_w, 'W3')
    b3 = bias_variable(struct_b, 'b3')
    y = tf.nn.sigmoid(tf.matmul(h2, W3) + b3)

    # Calculating difference between label and output using mean square error
    mse = tf.reduce_mean(tf.square(y - y_))

    # Train the Model
    # Gradient Descent
    train_step = tf.train.GradientDescentOptimizer(0.3).minimize(mse)

该模型的设计目标是将n_fft点fft谱图映射到另一个n_fft目标谱图.我们假设训练数据和目标数据都是大小的[3000, n_fft].它们存储在变量spec_trainspec_target.

现在问题来了.对于TensorFlow,这两项培训有什么区别吗?

培训1:

for i in xrange(200):
        train_step.run(feed_dict = {x: spec_train, y_: spec_target})

培训2:

for i in xrange(200):
        for j in xrange(3000):
            train = spec_train[j, :].reshape(1, n_fft)
            label = spec_target[j, :].reshape(1, n_fft)
            train_step.run(feed_dict = {x: train, y_: label})

非常感谢你!



1> mrry..:

在第一个培训版本中,您将一次训练整批训练数据,这意味着spec_train将在一个步骤中使用相同的模型参数处理第一个和第3000个元素.这被称为(批量)梯度下降.

在第二个培训版本中,您将立即从训练数据中训练一个示例,这意味着spec_train将使用自第一个元素最近处理以来已更新2999次的模型参数处理第3000个元素.这被称为随机梯度下降(或者如果元素是随机选择的话).

通常,TensorFlow用于太大而无法在一个批处理中处理的数据集,因此有利于小批量SGD(其中一个步骤的子集在一个步骤中处理).理论上一次处理单个元素是理想的,但是本质上是顺序的并且具有高的固定成本,因为矩阵乘法和其他操作不是计算密集的.因此,一次处理小批量(例如32或128)的示例是通常的方法,并行地对不同批次的多个副本进行训练.

请参阅此Stats StackExchange问​​题,以获得有关何时应使用一种方法与另一种方法的更多理论讨论.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有