【发布时间】:2019-01-27 10:54:59
【问题描述】:
我目前正在尝试从tutorial 改进算法。更具体地说是 CNN 模型的层。
def cnn_model():
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',
input_shape=(3, IMG_SIZE, IMG_SIZE),
activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3, 3), padding='same',
activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
########### The problem occurs when this is removed ############
model.add(Conv2D(128, (3, 3), padding='same',
activation='relu'))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
################################################################
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(NUM_CLASSES, activation='softmax'))
return model
为了获得更好的准确性,我尝试添加新图层或删除一个(在展平之前),但如果这样做,我会收到以下错误
分配形状为[]的张量和类型为float时的OOM
我是机器学习的新手,并不真正理解错误。我知道卷积/密集/池化层的作用,但我不确定如何在模型中实际使用它们。
所以我的问题是:
为什么会出现这样的错误?
有人能给我一些建议如何获得更好的准确性,或者给我一些关于创建 CNN 模型的好教程吗?
编辑:
我在 gpu 上运行它,IMG_SIZE 为 32,批量大小为 32。除非我在模型中添加或删除层,否则它运行良好。可以在here 找到堆栈跟踪。我知道它的内存分配错误,它似乎与输入的形状有关。
【问题讨论】:
-
您的 IMG_SIZE 是多少,批量大小以及您是否使用 gpu?
-
您能否提供一个导致错误的代码更改示例?
-
这是内存分配错误。能否请您也发布回溯。
-
问题已编辑。 @SashaTsukanov 例如,我删除了第三个卷积层,就会发生这种情况。
标签: python tensorflow keras