最近我尝试使用Python中的Tensorflow进行机器学习,作为我用这两种产品的第一个项目,为下一学期做准备,但我遇到了关于运行时的问题,也许还有我的一般理解。
我想创建一个程序:
好消息是我确实设法做到了这一点:
import tensorflow as tf
import numpy as np
from PIL import Image
input = "pic.png"
output = "output.png"
file = Image.open(path)
picture = np.array(file, np.float16)
tenarray = tf.Variable(picture) #takes 20+ sec to run
greenPic = np.empty([len(picture[:, 1]), len(picture[1]), 3], dtype=np.float16)
greenPic[:, :, 1] = 250
comparisonPic = tf.Variable(greenPic) #takes 20+ sec to run
picComparison = tf.reduce_mean(-tf.reduce_sum(comparisonPic * tf.log(tenarray)))
rate = 0.05
trainingStep = tf.train.GradientDescentOptimizer(rate).minimize(picComparison)
with tf.Session() as sesh:
sesh.run(tf.global_variables_initializer()) #Sets our variables, gets ready to run.
for i in range(100):
sesh.run(trainingStep)
resultArray = sesh.run(tenarray)
#Save picture
问题是,该代码需要45秒运行,基本上是2 * 22秒的空闲时间和〜1秒的实际计算。
我制作了更快的版本,但他们都无法操纵图片,或拒绝编译。 有没有人知道如何做到这一点,效率更高?
答案 0 :(得分:0)
我自己设法解决了这个问题,所以如果有人因某种原因遇到同样的问题,我会在这里发表评论。
问题在于使用tf.float16&而不是tf.float32用于图像张量,更改这使得上面的代码对我来说运行速度提高了50倍。
所以:
import returnHello from "helloworld";
describe("Some Test", function() {
it("passes", () => expect(returnHello()).toEqual("Hello"));
});