深度学习的数据集都是怎样生成的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习的数据集都是怎样生成的相关的知识,希望对你有一定的参考价值。

参考技术A 你好
genet网络的预训练模型训练自己的数据集。
Ok首先是自己的数据集了。Matconvnet中训练imagenet的数据集的准备不像caffe这些工具箱弄得那么好,弄个train文件夹,test文件夹,以及两个txt索引就好了,感觉很不人性。后面我将会将其输入改为这种人性的类型输入格式。
但是其类别索引是从0开始的,这在matlab中是不符合的,所以我将其改成从1开始的。同时添加了一个类class标签的txt,改完的
下载完打开这个文件夹看到:

其中train就是训练所用到的所有图片,test为测试所有图片,train_label为对应图片的名字以及跟随的类标签(从1开始),打开txt可以看到为:

这种格式的txt相信应该很容易从你自己的数据集中弄到。依次类推,test.txt中存放的是test文件夹所有图片的名字以及其类别。
Classind 就是每一类表示的分类的名字。

数据准备好了,放在哪呢?我们在Matconvnet的工具箱目录下新建一个文件夹为data,然后将这个数据集放进去,如下:

我们是在训练好的model上继续训练,所以需要一个model,再在这文件夹下建立一个models文件夹,然后把imagenet-vgg-f.mat放入到models里面。这里我们使用的是vgg-f的model,这个model在前两节说到了,自己去下载。
接着就是网络训练了。再建立一个文件夹train,可以编写函数了。
首先是主函数:
这里复制一下examples中的imagenet里面的一个主函数cnn_dicnn,然后修改一下里面的路径,程序为:
满意请采纳

多输入深度学习中的平均层

【中文标题】多输入深度学习中的平均层【英文标题】:Average layer in multi input deep learning 【发布时间】:2019-05-01 21:18:39 【问题描述】:

我正在努力在 Keras 中创建一个用于图像分类的多输入卷积神经网络 (CNN) 模型,该模型采用两张图像并给出一个输出,即两幅图像的类别。

我有两个数据集:type1 和 type2,每个数据集都包含相同的类。模型应该从 Type1 数据集中获取一张图像,从 Type2 数据集中获取一张图像,然后将这些图像分类为一个类(ClassA 或 ClassB 或------)。

我想创建一个模型来预测这两个图像,然后计算预测的平均值,类似于下图:

如何创建此模型? 如何在 fit_generator 中创建生成器?

【问题讨论】:

【参考方案1】:

选项 1 - 双方都是同一个模型,只是使用不同的输入

假设您有一个模型可以升级到“谓词”,称为predModel。 创建两个输入张量:

input1 = Input(shape)   
input2 = Input(shape)

获取每个输入的输出:

pred1 = predModel(input1)
pred2 = predModel(input2)   

平均输出:

output = Average()([pred1,pred2])

创建最终模型:

model = Model([input1,input2], output)

Option2 - 两边是相似的模型,但使用不同的权重

与上述基本相同,但为每一面单独创建图层。

def createCommonPart(inputTensor):
    out = ZeroPadding2D(...)(inputTensor)
    out = Conv2D(...)(out)

    ...
    out = Flatten()(out)
    return Dense(...)(out)

进行两个输入:

input1 = Input(shape)   
input2 = Input(shape)

得到两个输出:

pred1 = createCommonPart(input1)
pred2 = createCommonPart(input2)

平均输出:

output = Average()([pred1,pred2])

创建最终模型:

model = Model([input1,input2], output)

生成器

任何产生[xTrain1,xTrain2], y 的东西。

你可以像这样创建一个:

def generator(files1,files2, batch_size):

    while True: #must be infinite

        for i in range(len(files1)//batch_size)):
            bStart = i*batch_size
            bEnd = bStart+batch_size

            x1 = loadImagesSomehow(files1[bStart:bEnd])
            x2 = loadImagesSomehow(files2[bStart:bEnd])
            y = loadPredictionsSomeHow(forSamples[bStart:bEnd])

            yield [x1,x2], y

您也可以用类似的方式实现keras.utils.Sequence

class gen(Sequence):
    def __init__(self, files1, files2, batchSize):
        self.files1 = files1
        self.files2 = files2
        self.batchSize = batchSize

    def __len__(self):
        return self.len(files1) // self.batchSize

    def __getitem__(self,i):

        bStart = i*self.batchSize
        bEnd = bStart+self.batchSize 

        x1 = loadImagesSomehow(files1[bStart:bEnd])
        x2 = loadImagesSomehow(files2[bStart:bEnd])
        y = loadPredictionsSomeHow(forSamples[bStart:bEnd])

        return [x1,x2], y

【讨论】:

非常感谢您的回复。我如何在fit_generator(generator, steps_per_epoch=None, epochs=1, verbose=1) 中创建fit_generator 并确定generator?? 查看新答案。

以上是关于深度学习的数据集都是怎样生成的的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow实现基于深度学习的图像补全

多输入深度学习中的平均层

深度学习:生成模型

深度学习

动手学深度学习17-kaggle竞赛实践小项目房价预测

深度学习各领域数据集有效整理——持续更新——感谢支持