我刚开始学习深度学习,想构建一个模型,通过给定的图片预测灾害类型(洪水、火灾、基础设施损坏)。我想使用迁移学习,但不确定哪个模型能给我带来最佳结果。
我尝试从头开始构建一个CNN模型,但测试准确率只有70%,这个结果偏低。
模型代码如下:
num_classes=3model = Sequential()model.add(Conv2D(64, kernel_size=(3, 3), activation='relu', input_shape=(512,512,3)))model.add(Conv2D(128, (3, 3), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256, activation='relu'))model.add(Dropout(0.5))model.add(Dense(num_classes, activation='softmax'))model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy'])kf=KFold(n_splits=10 ,shuffle=True)for train_index, test_index in kf.split(X): print("Folding") x_train, x_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] y_train = to_categorical(y_train, num_classes) y_test = to_categorical(y_test, num_classes) model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test)) score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) loss.append(score[0]) print('Test accuracy:', score[1]) acc.append(score[1])
附注:X是一个形状为(3000,512,512,3)的numpy数组,Y是一个形状为(3000,1)的numpy数组,每个类别的值为{0,1,2}
回答:
我使用了ResNet18模型进行迁移学习,每个类别使用了100张图片,结果准确率达到了99%。我认为这应该能解决你的问题。