如何快速有效地打开和操作图片?

时间:2017-07-06 21:44:11

标签: python python-3.x tensorflow

最近我尝试使用Python中的Tensorflow进行机器学习,作为我用这两种产品的第一个项目,为下一学期做准备,但我遇到了关于运行时的问题,也许还有我的一般理解。

我想创建一个程序:

  1. 加载图片(来自路径)
  2. 使用损失函数和渐变正确将所有像素变为绿色
  3. 再次输出图片。
  4. 好消息是我确实设法做到了这一点:

    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秒的实际计算。

    我制作了更快的版本,但他们都无法操纵图片,或拒绝编译。 有没有人知道如何做到这一点,效率更高?

1 个答案:

答案 0 :(得分:0)

我自己设法解决了这个问题,所以如果有人因某种原因遇到同样的问题,我会在这里发表评论。

问题在于使用tf.float16&而不是tf.float32用于图像张量,更改这使得上面的代码对我来说运行速度提高了50倍。

所以:

import returnHello from "helloworld";

describe("Some Test", function() {
  it("passes", () => expect(returnHello()).toEqual("Hello"));
});