一维卷积高光谱图像分类代码
时间: 2023-08-31 11:10:39 浏览: 103
以下是使用一维卷积神经网络(1D CNN)对高光谱图像进行分类的示例代码。
```python
import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv1D, MaxPooling1D
# 加载数据
data = np.load('data.npy')
labels = np.load('labels.npy')
# 将数据分为训练集和测试集
train_data = data[:800]
train_labels = labels[:800]
test_data = data[800:]
test_labels = labels[800:]
# 设置模型参数
num_classes = 3
input_shape = (200, 1)
# 构建模型
model = Sequential()
model.add(Conv1D(32, kernel_size=3, activation='relu', input_shape=input_shape))
model.add(Conv1D(64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
batch_size = 16
epochs = 50
model.fit(train_data, train_labels, batch_size=batch_size, epochs=epochs, validation_data=(test_data, test_labels))
# 评估模型
score = model.evaluate(test_data, test_labels, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
```
在上面的代码中,我们使用了一个包含两个卷积层和一个全连接层的1D CNN模型。我们也使用了一个池化层和一个dropout层来防止过拟合。最后,我们评估了模型在测试集上的表现。
注意,我们的输入数据具有形状(样本数,特征数,通道数),因此我们在模型中指定了输入形状为(200,1)。在这个例子中,我们使用了200个特征和一个通道,但是你需要根据你的数据进行调整。
另外,我们使用了交叉熵作为损失函数,并使用Adam优化器进行训练。在训练过程中,我们将数据分为批次,并设置了50个迭代次数。你也可以根据你的数据和模型进行调整。
阅读全文