问题是,您每次都在编译Theano函数。编译需要时间。尝试如下传递编译后的函数:
def tfidf_gpu(appearance_in_documents,num_documents,document_words,TFIDF):
start = perf_counter()
ret = TFIDF(num_documents,appearance_in_documents,document_words)
end = perf_counter()
print("\nTFIDF_GPU ",end-start," secs.")
return ret
APP = T.scalar('APP',dtype='int32')
N = T.scalar('N',dtype='int32')
SF = T.scalar('S',dtype='int32')
F = (T.log(N)-T.log(APP)) / SF
TFIDF = theano.function([N,APP,SF],F)
tfidf_gpu(appearance_in_documents,num_documents,document_words,TFIDF)
此外,TFIDF任务是带宽密集型任务。Theano和GPU通常最适合计算密集型任务。
当前的任务将相当大的开销将数据传送到GPU并返回,因为最终您需要读取每个元素O(1)次。但如果你想做更多的计算,使用GPU是有意义的。