fn方法的参数作用java_是否有一种简单的方法来使用tf.data.Dataset.from_generator中的函数和张量流中的自定义model_fn(Estimator)...

我正在使用tensorflow数据集api作为我的训练数据,输入tf.data.Dataset.from_generator api的生成器和生成器

def generator():

......

yield { "x" : features }, label

def input_fn():

ds = tf.data.Dataset.from_generator(generator, ......)

......

feature, label = ds.make_one_shot_iterator().get_next()

return feature, label

然后我为我的Estimator创建了一个自定义的model_fn,代码如下:

def model_fn(features, labels, mode, params):

print(features)

......

layer = network.create_full_connect(input_tensor=features["x"],

(or layer = tf.layers.dense(features["x"], 200, ......)

......

训练时:

estimator.train(input_fn=input_fn)

但是,代码不起作用,因为函数model_fn的features参数是:

Tensor(“IteratorGetNext:0”,dtype = float32,device = / device:CPU:0)

代码“features [”x“]”将失败告诉我:

......“site-packages \ tensorflow \ python \ ops \ array_ops.py”,第504行,在_SliceHelper中end.append(s 1)TypeError:必须是str,而不是int

如果我将input_fn更改为:

input_fn = tf.estimator.inputs.numpy_input_fn(

x={"x": np.array([[1,2,3,4,5,6]])},

y=np.array([1]),

代码继续,因为现在的功能是一个字典 .

我搜索了估算器的代码,发现它使用了一些函数,如

features, labels = self._get_features_and_labels_from_input_fn(

input_fn, model_fn_lib.ModeKeys.TRAIN)

从input_fn检索功能和标签,但我不知道为什么它通过使用不同的数据集实现传递给我(model_fn)两种不同的数据类型的功能,如果我想使用我的生成器模式,那么如何使用该类型(IteratorGetNext) )功能?

谢谢你的帮助!

[UPDATED]

我对代码做了一些改动,

def generator():

......

yield features, label

def input_fn():

ds = tf.data.Dataset.from_generator(generator, ......)

......

feature, label = ds.make_one_shot_iterator().get_next()

return {"x": feature}, label

然而,现在它仍然在tf.layers.dense失败了

“图层dense_1的输入0与图层不兼容:其等级未定义,但图层需要定义的等级 . ”

虽然功能是一个字典:

'x':tf.Tensor'IteratorGetNext:0'shape = unknown dtype = float64

在正确的情况下,它是:

'x':tf.Tensor'random_shuffle_queue_DequeueMany:1'shape =(128,6)dtype = float64

我从中学到了类似的用法

def my_input_fn(file_path, perform_shuffle=False, repeat_count=1):

def decode_csv(line):

......

d = dict(zip(feature_names, features)), label

return d

dataset = (tf.data.TextLineDataset(file_path)

但是没有关于生成器案例的官方示例,它将迭代器返回到自定义的model_fn .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值