我是CNN的新手,但是对ML和神经网络有基本了解。
我想创建自己的可在Cats and Dogs数据集上使用的CNN。我对数据进行了预处理,并建立了我的网络,但是当我用数据拟合模型时,我的准确率就不能超过55%,这意味着该模型什么也没学。
有人可以在这里解释我在做什么错吗?
已经尝试了不同的学习率,甚至辍学,但徒劳
数据处理部分:
train_directory = r'C:\Users\atjayade\Downloads\P14-Convolutional-Neural-Networks\Convolutional_Neural_Networks\dataset\training_set'
test_directory = r'C:\Users\atjayade\Downloads\P14-Convolutional-Neural-Networks\Convolutional_Neural_Networks\dataset\test_set'
def label_image(img):
label = img.split('.')[-3]
if label == 'cat':
return [1,0]
if label == 'dog':
return [0,1]
training=[]
for item1 in os.listdir(train_directory):
path1 = os.path.join(train_directory, item1)
for item in tqdm.tqdm(os.listdir(path1)):
lab = label_image(item)
img_path = os.path.join(path1, item)
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (50,50))
training.append([np.array(img), lab])
testing=[]
for item1 in os.listdir(test_directory):
path1 = os.path.join(test_directory, item1)
for item in tqdm.tqdm(os.listdir(path1)):
lab = label_image(item)
img_path = os.path.join(path1, item)
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (50,50))
testing.append([np.array(img), lab])
test_x = np.array([i[0] for i in testing]).reshape(-1,50,50,1)
test_y = [i[1] for i in testing]
X = np.array([i[0] for i in training]).reshape(-1,50,50,1)
Y = [i[1] for i in training]
以及CNN模型和优化器部分:
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3,3),padding='SAME', input_shape=X[0].shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2), dim_ordering='th'))
model.add(Conv2D(filters=64, kernel_size=(3,3), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2), dim_ordering='th'))
model.add(Dropout(rate=0.4))
model.add(Conv2D(filters=128, kernel_size=(3,3), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2), dim_ordering='th'))
model.add(Dropout(rate=0.35))
#model.add(Conv2D(filters=64, kernel_size=(3,3), padding='SAME'))
#model.add(Activation('relu'))
#model.add(MaxPooling2D(pool_size=(2,2), dim_ordering='th'))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(rate=0.3))
model.add(Dense(2))
model.add(Activation('softmax'))
opt = keras.optimizers.SGD(lr=0.0001, decay=0.0)
model.compile(optimizer=opt, loss='binary_crossentropy', metrics['accuracy'])
print(model.summary())
model.fit(X, np.array(Y), validation_data=(test_x, np.array(test_y)), epochs=30, verbose=2)
上述模型在运行时给出的准确度不超过50%。尝试了CNN构建的不同变体,不同的优化程序,但徒劳无功。
有什么我没看到的东西吗?
答案 0 :(得分:0)
我终于可以工作了。
在调整并尝试了许多不同的学习率和优化器以及其他参数之后,我发现具有默认学习率的Adadelta最适合此操作。
谢谢大家为我提供帮助。
干杯。