Keras新手,海量内存Conv2D

2024-04-20 02:52:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我对卷积神经网络的理解是,它是一组应用于图像的较小滤波器。在

下面简单的模型中有一个Conv2D

model = Sequential()
model.add(Conv2D(128,(3,3),activation='relu',input_shape=(101,101,1)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(101*101,activation='sigmoid'))

参数=128*3*3=8192 字节计数=参数*4=32768字节

我看到的现实是tensorflow我的后端正试图为这次培训分配12.5GB的视频内存。在

我的数据以(4000101101,1)数组的形式传递给它,就像MNIST示例中使用(60000,28,28,1)数组一样。整个数组转换成float的数据约为326MB。在

我是不是做错了什么,或者说如果没有10 GB的视频ram,在GPU上训练图像几乎是不可能的?我有8GB,我不希望创造一些改变世界的东西,但数字。我需要以不同的方式准备数据吗?我试着传递一半的数据,内存分配基本上是一样的,但是将过滤器计数改为30可以让我编译没有错误。我误解了参数吗?如有任何帮助,将不胜感激。在

我以为128是过滤器的总数。不是每遍的总核数吗?看了文件,还是觉得我遗漏了什么。在


Tags: 数据内存图像add过滤器参数视频model
1条回答
网友
1楼 · 发布于 2024-04-20 02:52:30

这太大了:

model.add(Flatten())  #shape: (batch, 128*50*50)
model.add(Dense(101*101,activation='sigmoid')) #parameters: 128*50*50*101*101 + 101*101 = 3264330201

30亿个参数。(请检查您的model.summary()以确认)

你将一个稠密的层应用于所有具有平坦效果的对象:channels*pixels*pixels。在

我建议你寻找U-net风格的模型(完全卷曲)。 或者,如果你真的想使用密集层,首先使用某种GlobalPooling。在


小结:

^{pr2}$

相关问题 更多 >