gpt4 book ai didi

python - 简单千层面网络输出很慢

转载 作者:行者123 更新时间:2023-11-28 17:28:45 26 4
gpt4 key购买 nike

我正在尝试使用 Lasagne 训练一个极其简单的神经网络:一个密集层和一个输出,没有非线性(因此它只是一个线性回归)。这是我的代码:

#!/usr/bin/env python

import numpy as np
import theano
import theano.tensor as T
import lasagne
import time

def build_mlp(input_var=None):
l_in = lasagne.layers.InputLayer(shape=(None, 36), input_var=input_var)

l_out = lasagne.layers.DenseLayer(
l_in,
num_units=1)

return l_out

if __name__ == '__main__':
start_time = time.time()

input_var = T.matrix('inputs')
target_var = T.fvector('targets')
network = build_mlp(input_var)
prediction = lasagne.layers.get_output(network)[:, 0]
loss = lasagne.objectives.aggregate(lasagne.objectives.squared_error(prediction, target_var), mode="sum")
params = lasagne.layers.get_all_params(network, trainable=True)
updates = lasagne.updates.nesterov_momentum(loss, params, learning_rate=0.01, momentum=0.01)
train_fn = theano.function([input_var, target_var], loss, updates=updates, allow_input_downcast=True)

features = [-0.7275278, -1.2492378, -1.1284761, -1.5771232, -1.6482532, 0.57888401,\
-0.66000223, 0.89886779, -0.61547941, 1.2937579, -0.74761862, -1.4564357, 1.4365945,\
-3.2745962, 1.3266684, -3.6136472, 1.5396905, -0.60452163, 1.1510054, -1.0534937,\
1.0851847, -0.096269868, 0.15175876, -2.0422907, 1.6125549, -1.0562884, 2.9321988,\
-1.3044566, 2.5821636, -1.2787727, 2.0813208, -0.87762129, 1.493879, -0.60782474, 0.77946049, 0.0]

print("Network built in " + str(time.time() - start_time) + " sec")

it_number = 1000

start_time = time.time()
for i in xrange(it_number):
val = lasagne.layers.get_output(network, features).eval()[0][0]
print("1K outputs: " + str(time.time() - start_time) + " sec")

p = params[0].eval()

start_time = time.time()
for i in xrange(it_number):
n = np.dot(features, p)
print("1K dot products: " + str(time.time() - start_time) + " sec")

print(val)
print(n)

我还没有在这里训练网络,只是进行 1K 次评估(使用初始随机权重)以查看获得 1K 次网络实际预测需要多少时间。与 1K 点积相比,这是一个可怕的减速!

Network built in 8.86999106407 sec
1K outputs: 53.0574831963 sec
1K dot products: 0.00349998474121 sec
0.0
[-3.37383742]

所以我的问题是:为什么要花这么多时间来评估这么简单的网络?

此外,我对预测值感到困惑。如果点积较小大于零,网络输出 0,否则这两个值相同:

Network built in 8.96299982071 sec
1K outputs: 54.2732210159 sec
1K dot products: 0.00287079811096 sec
1.10120121082
[ 1.10120121]

我是否遗漏了有关 DenseLayer 工作原理的信息?

最佳答案

感谢 Jan Schlueter 的 https://groups.google.com/forum/#!forum/lasagne-users有一个答案。

在这里,我不仅完成了 1K 次网络传递,还编译了 1K 种不同的函数,并分别调用了一次。而不是在 1K 个不同的表达式上使用 eval()(它们不同是因为它们每个都包含一个不同的 numpy 数组作为常量),我应该编译一个单一的预测函数(类似于 train_fn,但返回预测而不是返回损失和执行更新)并在循环中调用 1K 次。

关于 DenseLayer 的问题也解决了:

DenseLayer 包含非线性,默认为整流器。整流器将所有小于零的输出设置为零。

似乎所有烤宽面条问题都更有可能在 googlegroups 上而不是在 StackOverflow 上得到解答。根据 Jan 的说法,他们更关注邮件列表。

关于python - 简单千层面网络输出很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36318362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com