使用tf.data.Dataset.map()混合增强样本和原始样本

时间:2018-07-02 12:45:03

标签: python tensorflow

据我从张量流文档图中了解,映射用于基于函数parse_function_wrapper修改图像。

class Example(QtGui.QMainWindow):
    def __init__(self):
        super(Example, self).__init__()

        ql = ColorBlocks()

        colAction = QtGui.QWidgetAction(self)
        colAction.setDefaultWidget(ql)
        ql.colorSelected.connect(self.clicked_color)
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(colAction)

        self.ui_color_filter = ColorBlock()
        ql1 = ColorBlocks()
        colAction1 = QtGui.QWidgetAction(self)
        colAction1.setDefaultWidget(ql1)
        ql1.colorSelected.connect(self.clicked_color)
        menu_colors = QtGui.QMenu('Colors', self)
        menu_colors.addAction(colAction1)
        self.ui_color_filter.setMenu(menu_colors)

        lay_main = QtGui.QVBoxLayout()
        lay_main.setAlignment(QtCore.Qt.AlignTop)
        lay_main.addWidget(self.ui_color_filter)
        widget_main = QtGui.QWidget()
        widget_main.setLayout(lay_main)
        self.setCentralWidget(widget_main)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Menubar')    
        self.show()

现在,数据集将仅具有增强图像,而没有原始图像。因此,我的疑问是,我们需要使用原始数据以及增强数据来训练我们的模型。谁能告诉我如何使用原始数据进行训练?

1 个答案:

答案 0 :(得分:1)

我看到两个简单的解决方案:

1)保留原始数据集和扩充后的数据集,然后将其压缩,flat_map和随机播放:

augmented = dataset.map(parse_function_wrapper,
                  num_parallel_calls=4)
mixed_dataset = (tf.data.Dataset.zip([dataset, augmented])
                 .flat_map(lambda x: x)
                 .shuffle(BUFFER_SIZE)) # use an appropriate buffer size

2)通过以概率parse_function_wrapper应用增强并以概率p < 1返回未修改的输入来使1-p随机。再加上重复数据集,可获得与先前解决方案相似的效果,但从逻辑上讲更容易理解。而且,通过这种方式,您可以更好地控制训练数据集中增强样本与原始样本的比率,因为您可以明确设置应在“混合”数据集中增加百分比的数据。