Skip to main content
 首页 » 编程设计

python之tensorflow 的线性回归非常慢

2025年05月04日31telwanggs

我正在尝试在 tensorflow 中实现一个简单的线性回归(目标是最终将其扩展到更高级的模型)。我当前的代码如下所示:

def linear_regression(data, labels): 
    # Setup placeholders and variables 
    num_datapoints = data.shape[0] 
    num_features = data.shape[1] 
    x = tf.placeholder(tf.float32, [None, num_features]) 
    y_ = tf.placeholder(tf.float32, [None]) 
    coeffs = tf.Variable(tf.random_normal(shape=[num_features, 1])) 
    bias = tf.Variable(tf.random_normal(shape=[1])) 
 
    # Prediction 
    y = tf.matmul(x, coeffs) + bias 
 
    # Cost function 
    cost = tf.reduce_sum(tf.pow(y-y_, 2))/(2.*num_datapoints) 
 
 
    # Optimizer 
    NUM_STEPS = 500 
    optimizer = tf.train.AdamOptimizer() 
    train_step = optimizer.minimize(lasso_cost) 
 
    # Fit the model 
    init = tf.initialize_all_variables() 
    cost_history = np.zeros(NUM_STEPS) 
    sess = tf.Session() 
    sess.run(init) 
 
    for i in range(NUM_STEPS): 
        if i % 100 == 0: 
            print 'Step:', i 
        for xi, yi in zip(data, labels): 
            sess.run(train_step, feed_dict={x: np.expand_dims(xi, axis=0),  
                y_: np.expand_dims(yi, axis=0)}) 
            cost_history[i] = sess.run(lasso_cost, feed_dict={x: data, 
                y_:labels}) 
 
    return sess.run(coeffs), cost_history 

代码有效,并找到了正确的系数。但是,它非常慢。在我的 MacBook Pro 上,只需为一个包含 1000 个数据点和 10 个特征的数据集运行几个训练周期就需要几分钟。由于我运行的是 OSX,所以我没有 GPU 加速,这可以解释一些缓慢的原因,但我认为它可能比这更快。我尝试了不同的优化器,但性能非常相似。

是否有一些明显的方法可以加快这段代码的速度?否则,感觉 tensorflow 对于这些类型的问题几乎毫无用处。

请您参考如下方法:

它太慢了,因为您逐点训练网络,这需要 NUM_STEPS * num_datapoints 次迭代(这导致 50 万 个循环)。

你真正需要训练你的网络是

for i in range(NUM_STEPS): 
    sess.run(train_step, feed_dict={x: data, y_:labels}) 

这只需要几秒钟。