Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在tensorflow数据集api中添加随机操作?_Tensorflow_Deep Learning - Fatal编程技术网

如何在tensorflow数据集api中添加随机操作?

如何在tensorflow数据集api中添加随机操作?,tensorflow,deep-learning,Tensorflow,Deep Learning,我想在py_func运算中生成随机数据,但是当我运行这段代码时,我会得到不同的随机数据,这在这段代码中是一样的 我认为问题来自tf.data.Dataset.mapapi。当我得到d5的值时,它将运行两次random函数,在这种情况下,d3和d4将得到不同的值 谢谢 将tensorflow导入为tf 将numpy作为np导入 def随机(x): def随机_ux: x=np.float32(np.random.rand()) 打印(“随机运行”) 返回x,x 返回tf.compat.v1.py_

我想在py_func运算中生成随机数据,但是当我运行这段代码时,我会得到不同的随机数据,这在这段代码中是一样的

我认为问题来自
tf.data.Dataset.map
api。当我得到d5的值时,它将运行两次
random
函数,在这种情况下,d3和d4将得到不同的值

谢谢

将tensorflow导入为tf
将numpy作为np导入
def随机(x):
def随机_ux:
x=np.float32(np.random.rand())
打印(“随机运行”)
返回x,x
返回tf.compat.v1.py_func(
随机的,
[x] ,,
[tf.float32,tf.float32],
name=“随机生成”)
d1=tf.data.Dataset.from_张量_切片(tf.zeros(10))
d2=d1.映射(随机)
d3=d2.map(λx1,x2:x1)
d4=d2.map(λx1,x2:x2)
d5=tf.data.Dataset.zip((d3,d4))
it=d5.make_one_shot_iterator()
fetch=it.get_next()
使用tf.Session()作为sess:
尽管如此:
X=sess.run(fetch)
打印(X)
根据-

将map_func映射到此数据集的元素

此转换将map_func应用于此数据集的每个元素, 并在 与它们在输入中出现的顺序相同。map_func可用于 更改数据集元素的值和结构。对于 例如,向每个元素添加1,或投影元素的子集 组成部分

我认为最好将
map
功能作为管道的一部分。每次运行
map
,数据都不会发生任何变化。相反,在后台进行一系列操作。请注意,这些转换是惰性执行的。只有当您实际从数据集请求数据时(如使用for循环和批处理),数据集中的源数据才会通过管道传送。此时,每个
map
将应用于图像或批次

作为替代方案,您可以满足以下要求-

代码-

%tensorflow_version 1.x
import tensorflow as tf
import numpy as np

def random(x):
  x = np.float32(np.random.rand())
  print("run random_")
  return x

a = []
for i in range(10):
  a.append(random(i))

d1 = tf.data.Dataset.from_tensor_slices(a)

d5 = tf.data.Dataset.zip( (d1,d1) )

it = d5.make_one_shot_iterator()
fetch = it.get_next()
with tf.Session() as sess:
    while True:
        X = sess.run(fetch)
        print(X)
输出-

run random_
run random_
run random_
run random_
run random_
run random_
run random_
run random_
run random_
run random_
WARNING:tensorflow:From <ipython-input-2-ee4ae8ca7ce4>:18: DatasetV1.make_one_shot_iterator (from tensorflow.python.data.ops.dataset_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `for ... in dataset:` to iterate over a dataset. If using `tf.estimator`, return the `Dataset` object directly from your input function. As a last resort, you can use `tf.compat.v1.data.make_one_shot_iterator(dataset)`.
(0.6963448, 0.6963448)
(0.92889917, 0.92889917)
(0.054273304, 0.054273304)
(0.3719434, 0.3719434)
(0.33791015, 0.33791015)
(0.873847, 0.873847)
(0.66726416, 0.66726416)
(0.77356577, 0.77356577)
(0.4188753, 0.4188753)
(0.8886825, 0.8886825)
随机运行_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
警告:tensorflow:From:18:DatasetV1.make_one_shot_迭代器(来自tensorflow.python.data.ops.dataset_ops)已弃用,将在未来版本中删除。
更新说明:
用`表示。。。在数据集中:`在数据集上迭代。如果使用'tf.estimator',则直接从输入函数返回'Dataset'对象。最后,您可以使用`tf.compat.v1.data.make_one_shot_iterator(dataset)`。
(0.6963448, 0.6963448)
(0.92889917, 0.92889917)
(0.054273304, 0.054273304)
(0.3719434, 0.3719434)
(0.33791015, 0.33791015)
(0.873847, 0.873847)
(0.66726416, 0.66726416)
(0.77356577, 0.77356577)
(0.4188753, 0.4188753)
(0.8886825, 0.8886825)
希望这能回答你的问题。快乐学习。

按照-

将map_func映射到此数据集的元素

此转换将map_func应用于此数据集的每个元素, 并在 与它们在输入中出现的顺序相同。map_func可用于 更改数据集元素的值和结构。对于 例如,向每个元素添加1,或投影元素的子集 组成部分

我认为最好将
map
功能作为管道的一部分。每次运行
map
,数据都不会发生任何变化。相反,在后台进行一系列操作。请注意,这些转换是惰性执行的。只有当您实际从数据集请求数据时(如使用for循环和批处理),数据集中的源数据才会通过管道传送。此时,每个
map
将应用于图像或批次

作为替代方案,您可以满足以下要求-

代码-

%tensorflow_version 1.x
import tensorflow as tf
import numpy as np

def random(x):
  x = np.float32(np.random.rand())
  print("run random_")
  return x

a = []
for i in range(10):
  a.append(random(i))

d1 = tf.data.Dataset.from_tensor_slices(a)

d5 = tf.data.Dataset.zip( (d1,d1) )

it = d5.make_one_shot_iterator()
fetch = it.get_next()
with tf.Session() as sess:
    while True:
        X = sess.run(fetch)
        print(X)
输出-

run random_
run random_
run random_
run random_
run random_
run random_
run random_
run random_
run random_
run random_
WARNING:tensorflow:From <ipython-input-2-ee4ae8ca7ce4>:18: DatasetV1.make_one_shot_iterator (from tensorflow.python.data.ops.dataset_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `for ... in dataset:` to iterate over a dataset. If using `tf.estimator`, return the `Dataset` object directly from your input function. As a last resort, you can use `tf.compat.v1.data.make_one_shot_iterator(dataset)`.
(0.6963448, 0.6963448)
(0.92889917, 0.92889917)
(0.054273304, 0.054273304)
(0.3719434, 0.3719434)
(0.33791015, 0.33791015)
(0.873847, 0.873847)
(0.66726416, 0.66726416)
(0.77356577, 0.77356577)
(0.4188753, 0.4188753)
(0.8886825, 0.8886825)
随机运行_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
乱跑_
警告:tensorflow:From:18:DatasetV1.make_one_shot_迭代器(来自tensorflow.python.data.ops.dataset_ops)已弃用,将在未来版本中删除。
更新说明:
用`表示。。。在数据集中:`在数据集上迭代。如果使用'tf.estimator',则直接从输入函数返回'Dataset'对象。最后,您可以使用`tf.compat.v1.data.make_one_shot_iterator(dataset)`。
(0.6963448, 0.6963448)
(0.92889917, 0.92889917)
(0.054273304, 0.054273304)
(0.3719434, 0.3719434)
(0.33791015, 0.33791015)
(0.873847, 0.873847)
(0.66726416, 0.66726416)
(0.77356577, 0.77356577)
(0.4188753, 0.4188753)
(0.8886825, 0.8886825)

希望这能回答你的问题。快乐学习。

@ye stone-希望我们已经回答了您的问题。如果你对答案感到满意,请你接受并投赞成票。@ye stone-希望我们已经回答了你的问题。如果你对答案感到满意,请接受并投票。