首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理Keras中的大图像?

如何处理Keras中的大图像?
EN

Stack Overflow用户
提问于 2017-09-21 21:54:36
回答 1查看 1.6K关注 0票数 0

我正在研究Keras上的机器学习问题。我的目标是训练输入为(4214, 22311)矩阵,输出为(22311,)向量的模型。

这样的二维数据可以作为图像输入来处理,但大多数图像分类器只对形状(200, 200)的小图像进行分类。

我尝试了几种在Keras上建立模型的方法,例如CNN、双向LSTM或简单的神经网络(平坦和密集)。但它们都不起作用。

我没有完成一个时代就接受了killed。所以我想知道什么样的结构能处理这么大的输入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 01:05:37

有一个很好的机会,它可以工作在一个完全卷积的模型,你必须消除空间维度之前,任何类型的扁平/稠密。但是,由于只有相同的数据会有太多的卷积,这似乎不是最好的主意.

由于您想要一个结果为22311的输出,LSTM方法(考虑一个不同的变量是第一个变量)可能是最有用的.

和LSTM模型:

在第一次尝试时,您可以尝试一个非有状态的LSTM模型。

但是,不要像最后一个维度是特征一样工作(20000个特征会创造出许多参数)!工作起来,就好像它们是时间步骤。

分步骤转换特性可能会使模型更难理解。另一方面,如果你不这样做,你的记忆就会不断膨胀。但是,如果一个不同的数据是第一步,那么下面所有的(和重复的)数据都很有可能得到一些额外的意义。

所以,首先,我们要重塑的只有一个特征:

代码语言:javascript
复制
inp = Input((4214,1))
out = Lambda(yourFunction, output_shape=(4214,22312))(inp)
out = Reshape((4214,22312,1))(out)

现在,让我们尝试一个技巧,把它变成序列序列,添加TimeDistributed包装器(这允许维度增加):

代码语言:javascript
复制
out = TimeDistributed(LSTM(cells,return_sequences=True))(out)

#you may add more

让我们保留return_sequences = True,因为您希望在模型的末尾执行非常类似的步骤。

在某个时候,让我们折叠4214维,把它放在末尾,就好像它是时间步骤(或者甚至好像它是特性--风险,但是比23312特性风险小得多)。在这里,由于它们是独立的,Bidirectional包装器可能会派上用场:

代码语言:javascript
复制
out = Permute((2,1,3))(out)

1-如果你按4214个步骤选择:

代码语言:javascript
复制
#you can use one or more layers with return_sequences=True before this one
out = TimeDistributed(Bidirectional(LSTM(cells,return_sequences=False)))(out)

2-如果您选择4214项功能:

代码语言:javascript
复制
#remove the last dimension which was 1
out = Reshape((22312,4214))  

#no need to care about they being a sequence, no TimeDistributed, no Bidirectional. 
out = LSTM(cells,return_sequences=True)(out)
    #the return_sequences=True here relates to the 22312 steps   

#but you need to go back to 1 feature per step:
out = Reshape((22312,1))(out)

现在,4214维已经崩溃,所有的东西现在都是一个类似(batchSize, 22312, 1)的序列。由于我们不再是4D,而是3D,所以我们可以放弃TimeDistributed包装器:

代码语言:javascript
复制
out = LSTM(cells,return_sequences=True)(out)

最后,使用lambda层丢弃这个序列的第一个元素(仅仅是为了匹配您想要的输出):

代码语言:javascript
复制
out = Lambda(lambda x: x[:,1:,:], output_shape=(22311,1))(out)
out = Reshape((22311,))(out)

model = Model(inp,out)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46353720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档