tensorflow sess.run() 随感

版权声明:博主原创文章属私人所有,未经允许 不可转发和使用 https://blog.csdn.net/a1066196847/article/details/84104655

tensorflow在使用sess.run的时候,肯定会在里面进行传参,说些使用这个函数的一些经验。

一、features_, labels_, indexs_ = sess.run([features, labels, indexs])

是否需要进行传参feed_dict,需要看features, labels, indexs这3个变量的产生是否存在于“一个需要传参的函数中”,如果产生features, labels, indexs这3个变量的函数的形式像下面这样

def xxx():

    X = tf.placeholder(dtype=tf.float32, shape=([50,93]))
    Y = tf.placeholder(dtype=tf.int32, shape=([50]))
    Z = tf.placeholder(dtype=tf.int32, shape=([50]))      

    ...

    return features, labels, indexs

features, labels, indexs = xxx()

那么这时候features_, labels_, indexs_ = sess.run([features, labels, indexs]),就需要写成下面这样

features_, labels_, indexs_ = sess.run([features, labels, indexs], feed_dict={X:features_, Y:labels_, Z:indexs_})

并且要注意feed_dict不接受tensor格式的数据,所以features_需要是普通格式,比如numpy,但是传参进去后,会自动进行类型的转化,在xxx()函数中,他们就变成tensor格式

二、是否执行一次sess.run函数,代码里的“数据迭代生成器”就会更新一次batch,那要取决于sess.run函数里面的参数是否与“数据迭代生成器”有关

features_, labels_, indexs_ = sess.run([features, labels, indexs])

假如features, labels, indexs = input_fn(),input_fn()函数每执行一次,就生成一个batch的数据,那么这种sess.run([features, labels, indexs])每每执行一次 就会更新一个batch的数据

举个反面的例子,也就是即使执行了2000次sess.run(),也不会更新batch的数据

pred_new_2 = sess.run([pred_new_1], feed_dict={X:features_, Y:labels_, Z:indexs_})。这里pred_new_1的产生函数 就必须要传进来3个参数,所以有feed_dict传参

当前pred_new_1并不是和“数据迭代生成器”有关,而是另外一个函数的返回结果,那么就符合我的举例

三、sess.run()可以用来很方便的将一些tensor格式的数据,进行数据具体内容查看,也就是将tensor格式转成numpy格式,上面的所有例子都是这种作用

猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/84104655