- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我通过以下代码让我的 keras 模型与 tf.Dataset 一起工作:
# Initialize batch generators(returns tf.Dataset)
batch_train = build_features.get_train_batches(batch_size=batch_size)
# Create TensorFlow Iterator object
iterator = batch_train.make_one_shot_iterator()
dataset_inputs, dataset_labels = iterator.get_next()
# Create Model
logits = .....(some layers)
keras.models.Model(inputs=dataset_inputs, outputs=logits)
# Train network
model.compile(optimizer=train_opt, loss=model_loss, target_tensors=[dataset_labels])
model.fit(epochs=epochs, steps_per_epoch=num_batches, callbacks=callbacks, verbose=1)
然而,当我尝试将 validation_data
参数传递给模型时。 fit 它告诉我不能将它与发电机一起使用。有没有办法在使用 tf.Dataset 时使用验证
例如在 tensorflow 中我可以执行以下操作:
# initialize batch generators
batch_train = build_features.get_train_batches(batch_size=batch_size)
batch_valid = build_features.get_valid_batches(batch_size=batch_size)
# create TensorFlow Iterator object
iterator = tf.data.Iterator.from_structure(batch_train.output_types,
batch_train.output_shapes)
# create two initialization ops to switch between the datasets
init_op_train = iterator.make_initializer(batch_train)
init_op_valid = iterator.make_initializer(batch_valid)
然后只需使用 sess.run(init_op_train)
和 sess.run(init_op_valid)
在数据集之间切换
我尝试实现一个回调来做到这一点(切换到验证集,预测并返回)但它告诉我我不能在回调中使用 model.predict
谁能帮助我使用 Keras+Tf.Dataset 进行验证
所以最终对我有用的,感谢选择的答案是:
# Initialize batch generators(returns tf.Dataset)
batch_train = # returns tf.Dataset
batch_valid = # returns tf.Dataset
# Create TensorFlow Iterator object and wrap it in a generator
itr_train = make_iterator(batch_train)
itr_valid = make_iterator(batch_train)
# Create Model
logits = # the keras model
keras.models.Model(inputs=dataset_inputs, outputs=logits)
# Train network
model.compile(optimizer=train_opt, loss=model_loss, target_tensors=[dataset_labels])
model.fit_generator(
generator=itr_train, validation_data=itr_valid, validation_steps=batch_size,
epochs=epochs, steps_per_epoch=num_batches, callbacks=cbs, verbose=1, workers=0)
def make_iterator(dataset):
iterator = dataset.make_one_shot_iterator()
next_val = iterator.get_next()
with K.get_session().as_default() as sess:
while True:
*inputs, labels = sess.run(next_val)
yield inputs, labels
这不会引入任何开销
最佳答案
我使用 fit_genertor 解决了这个问题。我找到了解决方案 here .我应用了@Dat-Nguyen 的解决方案。
您只需创建两个迭代器,一个用于训练,一个用于验证,然后创建您自己的生成器,您将从数据集中提取批处理并以 (batch_data, batch_labels) 的形式提供数据。最后,在 model.fit_generator 中,您将传递 train_generator 和 validation_generator。
关于python - Keras model.fit() 与 tf.dataset API + validation_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955798/
我从下面的链接下载并运行文件 https://github.com/keunwoochoi/keras_callbacks_example 但是它具有错误“顺序没有属性” validation_dat
所以我有一个预测输出功率的 GRU 模型。对于训练数据,我有一个 csv 文件,其中包含 2018 年的数据,而对于我的测试数据,它是一个不同的 csv 文件,其中包含 2019 年的数据。 我只需要
validation_data可以传递给model.fit,但是这个参数如何影响训练,以及如何确认validation_data的优化参数?我知道验证数据集用于模型调整最佳参数。但我无法想象有和没有
我决定从 keras 切换到 tf.keras(建议使用 here)。因此我安装了 tf.__version__=2.0.0和 tf.keras.__version__=2.2.4-tf .在我的旧版
我一直在尝试训练模型并在每个时期结束时计算精度和召回率。 自定义指标 class Metrics(keras.callbacks.Callback): def on_train_begin(s
我是 Python 和机器学习的新手。我对 keras model.fiit 中的句子“validation_data will override validation_split”感到困惑。这是否意
所以我通过以下代码让我的 keras 模型与 tf.Dataset 一起工作: # Initialize batch generators(returns tf.Dataset) batch_trai
起初它工作正常,然后我尝试在创建模型时调整一些参数,之后, print(model.history.history) 给我一本空字典。 如果有帮助,这是我的整个代码, import numpy as
我是一名优秀的程序员,十分优秀!