用python实现CNN高光谱图像分类 要求带有地物分类结果图的程序
时间: 2024-02-17 19:05:11 浏览: 111
好的,下面是一个基于Python实现CNN高光谱图像分类的示例程序,同时输出地物分类结果图:
```python
#导入必要的库
import numpy as np
import matplotlib.pyplot as plt
import keras
from keras import backend as K
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout
from keras.optimizers import Adam
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from scipy import io
#加载数据
data = io.loadmat('data.mat')
X = data['X']
y = data['y']
#将标签转换为one-hot编码
y = to_categorical(y)
#将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#定义模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(X.shape[1], X.shape[2], X.shape[3])))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(y.shape[1], activation='softmax'))
#编译模型
model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
#训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
#预测测试集
y_pred = model.predict(X_test)
#将预测结果转换为类别
y_pred_classes = np.argmax(y_pred, axis=1)
y_test_classes = np.argmax(y_test, axis=1)
#输出分类结果图
plt.imshow(y_pred_classes.reshape((X_test.shape[0], X_test.shape[1])), cmap='jet')
plt.colorbar()
plt.show()
```
需要注意的是,由于没有提供数据文件,上述代码中的数据加载部分需要根据具体情况进行修改。另外,需要根据实际情况调整模型的超参数和训练参数,以获得更好的分类效果。
阅读全文