作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想找到一种在 TF2.0 中的
tf.data.Dataset.map()
中使用 Keras 的 predict_on_batch
的方法。
假设我有一个 numpy 数据集
n_data = 10**5
my_data = np.random.random((n_data,10,1))
my_targets = np.random.randint(0,2,(n_data,1))
data = ({'x_input':my_data}, {'target':my_targets})
和一个tf.keras
模型
x_input = Input((None,1), name = 'x_input')
RNN = SimpleRNN(100, name = 'RNN')(x_input)
dense = Dense(1, name = 'target')(RNN)
my_model = Model(inputs = [x_input], outputs = [dense])
my_model.compile(optimizer='SGD', loss = 'binary_crossentropy')
我可以用
创建一个批处理的数据集
dataset = tf.data.Dataset.from_tensor_slices(data)
dataset = dataset.batch(10)
prediction_dataset = dataset.map(transform_predictions)
其中 transform_predictions
是一个用户定义的函数,它从 predict_on_batch
中获取预测结果
def transform_predictions(inputs, outputs):
predictions = my_model.predict_on_batch(inputs)
# predictions = do_transformations_here(predictions)
return predictions
这给出了来自 predict_on_batch
的错误:
AttributeError: 'Tensor' 对象没有属性 'numpy'
据我所知,predict_on_batch
需要一个 numpy 数组,并且它从数据集中获取一个张量对象。
似乎一种可能的解决方案是将 predict_on_batch
包装在 `tf.py_function 中,尽管我也无法让它工作。
有人知道怎么做吗?
最佳答案
Dataset.map() 返回 <class 'tensorflow.python.framework.ops.Tensor'>
它没有 numpy() 方法。
迭代数据集返回 <class 'tensorflow.python.framework.ops.EagerTensor'>
它有一个 numpy() 方法。
向 predict() 系列方法提供一个急切的张量效果很好。
你可以尝试这样的事情:
dataset = tf.data.Dataset.from_tensor_slices(data)
dataset = dataset.batch(10)
for x,y in dataset:
predictions = my_model.predict_on_batch(x['x_input'])
#or
predictions = my_model.predict_on_batch(x)
关于python - 如何在 tf.data.Dataset.map() 中使用 Keras 的 predict_on_batch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55485966/
我是一名优秀的程序员,十分优秀!