我目前将数据分成几个TFrecord文件,然后通过混排和交织读取数据。我的代码如下:
//get array of names and ids for inputs
$array = explode("\n", file_get_contents('array.txt'));
//trim post variables
$trimmed_array=array_map('trim',$array);
//loop through the array
echo '<form method="POST" action="insert.php">';
foreach($trimmed_array as $input) {//pass the trimmed version of name variables
echo '<label>'.$input.'</label>'
. '<input type="text" id="'.$input.'" name="'.$input.'" required="required" class="form-control" placeholder="'.$input.'">';
echo '<br>';
}
echo '<input type="submit" value="Submit">';
echo '</form>';
我有2个问题:
1)我的鳕鱼确实按照我的意愿去做。即,它是否从每个TFrecord文件中随机抽取样本
2)如果TFrecord文件包含的样本量相差很大(例如1个样本将包含50个样本,另外500个样本)会发生什么情况。这会根本影响随机性吗?
谢谢!
答案 0 :(得分:0)
Q1:不完全是。首先,该行不需要显式改组,public class Race implements Serializable {
private String name;
private String imageName; //name of file within drawable
已具有此参数。可以通过种子值来控制。
list_files
没有重复功能,当迭代器耗尽所有文件时,您将收到序列结束错误。所以应该是这样。将tf_dataset = tf.data.Dataset.list_files(path, shuffle=True, seed=1).
作为值传递时,它将无限期地进行迭代,或者您可以设置确切的时期数。
None
Q2:如果文件大小不同,可以。唯一的结果是大文件的内容将有更高的机会被迭代器选择。但这不会影响随机性。这行将完成工作,对交错的数据集进行混洗。唯一要记住的是,混洗缓冲区控制着加载到内存中的大量数据。通常建议将其设置为数据集中的示例数量(所有文件中所有示例的数量),但是在某些情况下,它可能会成为相当大的开销,甚至会导致OOM。
tf_dataset = tf.data.Dataset.list_files(path, shuffle=True, seed).repeat()
答案 1 :(得分:0)