使用CNN和Python实施的肺炎检测!这个项目你给几分?( 三 )


标签预处理此时 , 两个y变量都由以字符串数据类型编写的正常 , 细菌或病毒组成 。 实际上 , 这样的标签只是神经网络所不能接受的 。 因此 , 我们需要将其转换为单一格式 。
幸运的是 , 我们从Scikit-Learn模块获取了 OneHotEncoder对象 , 它对完成转换非常有帮助 。 为此 , 我们需要先在y_train和y_test上创建一个新轴 。 (我们创建了这个新轴 , 因为那是OneHotEncoder期望的形状) 。
y_train = y_train[:, np.newaxis] y_test = y_test[:, np.newaxis] 接下来 , 像这样初始化one_hot_encoder 。 请注意 , 在这里我将False作为稀疏参数传递 , 以便简化下一步 。 但是 , 如果你想使用稀疏矩阵 , 则只需使用sparse = True或将参数保留为空即可 。
one_hot_encoder = OneHotEncoder(sparse=False) 最后 , 我们将使用one_hot_encoder将这些y数据转换为one-hot 。 然后将编码后的标签存储在y_train_one_hot和y_test_one_hot中 。 这两个数组是我们将用于训练的标签 。
y_train_one_hot = one_hot_encoder.fit_transform(y_train) y_test_one_hot = one_hot_encoder.transform(y_test) 将数据X重塑为(None , 200 , 200 , 1)现在让我们回到X_train和X_test 。 重要的是要知道这两个数组的形状分别为(5216、200、200)和(624、200、200) 。
乍一看 , 这两个形状看起来还可以 , 因为我们可以使用plt.imshow()函数进行显示 。 但是 , 这种形状卷积层不可接受 , 因为它希望将一个颜色通道作为其输入 。
因此 , 由于该图像本质上是灰度图像 , 因此我们需要添加一个1维的新轴 , 该轴将被卷积层识别为唯一的颜色通道 。 虽然它的实现并不像我的解释那么复杂:
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], X_train.shape[2], 1) X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], X_test.shape[2], 1) 运行上述代码后 , 如果我们同时检查X_train和X_test的形状 , 那么我们将看到现在的形状分别是(5216 , 200 , 200 , 1)和(624 , 200 , 200 , 1) 。
数据扩充增加数据(或者更具体地说是增加训练数据)的要点是 , 我们将通过创建更多的样本(每个样本都具有某种随机性)来增加用于训练的数据数量 。 这些随机性可能包括平移、旋转、缩放、剪切和翻转 。
这种技术可以帮助我们的神经网络分类器减少过拟合 , 或者说 , 它可以使模型更好地泛化数据样本 。 幸运的是 , 由于存在可以从Keras模块导入的ImageDataGenerator对象 , 实现非常简单 。
datagen = ImageDataGenerator(rotation_range = 10,zoom_range = 0.1,width_shift_range = 0.1,height_shift_range = 0.1) 因此 , 我在上面的代码中所做的基本上是设置随机范围 。
接下来 , 在初始化datagen对象之后 , 我们需要做的是使它和我们的X_train相匹配 。 然后 , 该过程被随后施加的flow()的方法 , 该步骤中是非常有用的 , 使得所述 train_gen对象现在能够产生增强数据的批次 。
datagen.fit(X_train)train_gen = datagen.flow(X_train, y_train_one_hot, batch_size=32) CNN(卷积神经网络)现在是时候真正构建神经网络架构了 。 让我们从输入层(input1)开始 。 因此 , 这一层基本上会获取X数据中的所有图像样本 。 因此 , 我们需要确保第一层接受与图像尺寸完全相同的形状 。 值得注意的是 , 我们仅需要定义(宽度 , 高度 , 通道) , 而不是(样本 , 宽度 , 高度 , 通道) 。
此后 , 此输入层连接到几对卷积池层对 , 然后最终连接到全连接层 。 请注意 , 由于ReLU的计算速度比S型更快 , 因此模型中的所有隐藏层都使用ReLU激活函数 , 因此所需的训练时间更短 。 最后 , 要连接的最后一层是output1 , 它由3个具有softmax激活函数的神经元组成 。


推荐阅读