【发布时间】:2017-04-28 07:25:25
【问题描述】:
我正在运行一个用于左右鞋印分类的 CNN。我有 190,000 张训练图像,其中 10% 用于验证。我的模型设置如下所示。我得到所有图像的路径,读入它们并调整它们的大小。我对图像进行标准化,然后将其拟合到模型中。我的问题是我的训练准确率一直保持在 62.5%,损失在 0.6615-0.6619 左右。我做错了什么吗?我怎样才能阻止这种情况发生?
只需要注意一些有趣的点:
-
我首先在 10 张图像上进行了测试,我遇到了同样的问题,但将优化器更改为 adam 并将批量大小更改为 4 有效。
-
然后我对越来越多的图像进行了测试,但每次我都需要更改批量大小以提高准确性和损失。对于 10,000 张图像,我必须使用 500 的批量大小和优化器 rmsprop。然而,准确率和损失只是在 epoch 10 之后才真正开始发生变化。
-
我现在正在训练 190,000 张图像,我无法增加批量大小,因为我的 GPU 已达到最大值。
imageWidth = 50
imageHeight = 150
def get_filepaths(directory):
file_paths = []
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath) # Add it to the list.
return file_paths
def cleanUpPaths(fullFilePaths):
cleanPaths = []
for f in fullFilePaths:
if f.endswith(".png"):
cleanPaths.append(f)
return cleanPaths
def getTrainData(paths):
trainData = []
for i in xrange(1,190000,2):
im = image.imread(paths[i])
im = image.imresize(im, (150,50))
im = (im-255)/float(255)
trainData.append(im)
trainData = np.asarray(trainData)
right = np.zeros(47500)
left = np.ones(47500)
trainLabels = np.concatenate((left, right))
trainLabels = np_utils.to_categorical(trainLabels)
return (trainData, trainLabels)
#create the convnet
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(imageWidth,imageHeight,1),strides=1))#32
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation='relu',strides=1))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(1, 3)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (1, 2), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 1)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
sgd = SGD(lr=0.01)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=['accuracy'])
#prepare the training data*/
trainPaths = get_filepaths("better1/train")
trainPaths = cleanUpPaths(trainPaths)
(trainData, trainLabels) = getTrainData(trainPaths)
trainData = np.reshape(trainData,(95000,imageWidth,imageHeight,1)).astype('float32')
trainData = (trainData-255)/float(255)
#train the convnet***
model.fit(trainData, trainLabels, batch_size=500, epochs=50, validation_split=0.2)
#/save the model and weights*/
model.save('myConvnet_model5.h5');
model.save_weights('myConvnet_weights5.h5');
【问题讨论】:
标签: tensorflow deep-learning keras conv-neural-network