发新帖

Tensorflow封装的python函数为什么不能优化?

[复制链接]
654 5

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x


import tensorflow as tf
import numpy as np
import scipy.misc


def my_function(image):
    entro = 0.0
    entro_array = np.zeros(1, dtype = np.float32)
    pixel_num = np.zeros(256)
    matrix = image.astype(np.int32)
    for i in range(matrix.shape[0]):
        for j in range(matrix.shape[1]):
            pixel = matrix[i, j]
            pixel_num[pixel] = pixel_num[pixel] + 1
    pixel_num = pixel_num / (matrix.shape[0] * matrix.shape[1])


    for i in range(len(pixel_num)):
        if pixel_num > 0.0 and pixel_num < 1.0:
            entro = entro - pixel_num * np.log2(pixel_num)
    entro_array[0] = entro
    return entro_array


x = scipy.misc.imread("36.bmp", 0).astype(np.float32)
x = tf.reshape(x, [-1, 50, 50, 1])
w = tf.Variable(tf.random_normal([3, 3, 1, 1], stddev=1))
x = tf.clip_by_value(tf.nn.conv2d(x, w, strides = [1, 1, 1, 1], padding = "SAME"), 0, 255)
x = tf.reshape(x, [50, 50])


y = tf.reduce_sum(tf.py_func(my_function, [x], [tf.float32])) #调用自定义op,但是为什么不能优化呢?如果无法优化,那么自定义函数还有什么意义?


train_op = tf.train.GradientDescentOptimizer(0.001).minimize(-y)


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(train_op)
    out =sess.run(y)


我知道答案 回答被采纳将会获得10 金币 + 10 金币 已有5人回答
捕获.JPG
本楼点评(0) 收起

精彩评论5

so。  TF荚荚  发表于 2018-7-28 23:13:10 | 显示全部楼层
不是不能优化,自己定义的函数和TF自带的函数是不一样的。最近TF出了一个把python语句转化成TF语句的方法,你可以去看看
本楼点评(0) 收起
敬畏代码  TF荚荚  发表于 2018-7-30 10:24:08 | 显示全部楼层
自定义函数不同与自带函数
本楼点评(0) 收起
舟3332  TF芽芽  发表于 2018-8-6 23:59:42 | 显示全部楼层
想想 AD 的原理。想要能够被优化,要么需要给定导数函数,要么导数可以通过几个已知导数的函数合并算出来。

tf.* 都有定义导数,可是 my_function 并没有哦。可以考虑用 RegisterGradient 注册一个~
本楼点评(0) 收起
奈落之渊  TF荚荚  发表于 2018-8-10 17:53:17 | 显示全部楼层
舟3332 发表于 2018-8-6 23:59
想想 AD 的原理。想要能够被优化,要么需要给定导数函数,要么导数可以通过几个已知导数的函数合并算出来。 ...

谢谢
本楼点评(0) 收起
奈落之渊  TF荚荚  发表于 2018-8-10 17:54:04 | 显示全部楼层
舟3332 发表于 2018-8-6 23:59
想想 AD 的原理。想要能够被优化,要么需要给定导数函数,要么导数可以通过几个已知导数的函数合并算出来。 ...

谢谢
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表