如何使用Tensorflow和Keras制作CNN

如何使用Tensorflow和Keras制作CNN

卷积神经网络是当今学习的一个有用课题,从图像识别,视频分析到自然语言处理,它们的应用无处不在。

什么是卷积神经网络

卷积神经网络(CNN,或ConvNet)是一类深度前馈人工神经网络,最常用于分析视觉图像。卷积网络受到生物过程的启发,因为神经元之间的连接模式类似于动物视觉皮层的组织。它们在图像和视频识别,推荐系统和自然语言处理方面具有应用。

CNN的应用:

  • 图像识别
  • 视频分析
  • 自然语言处理
  • 药物发现
  • 健康风险评估和老龄化发现的生物标志物

为什么选择TensorFlow:

  • 这很容易学习
  • TF有一个很大的社区。
  • TensorFlow是可混合的,它支持许多类型的ML模型
  • 您可以使用图来调试模型。

现在我们要建立一个CNN

这是一件很容易实现的事情,你要做的就是遵循接下来的四个步骤:

第1步 :

导入下一个Python模块:

import numpy as np

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D

第2步 :

加载你的数据,我准备好使用我的数据,并且它之前被保存为numpy数组:

X = np.load('X_data.npy')

y = np.load('y_data.npy')

不要忘记归一化您的数据:

X = X/255.0

我将X除以255,因为我的数据包含灰度图像

第3步:

定义模型,在我们的案例中,我们选择了Sequential

model = Sequential()

现在添加一些层:

因为我们想要制作卷积神经网络(CNN),我们将使用Conv2D作为我们的第一和第二隐藏层。使用两个以上的卷积隐藏层是完全没问题的,但在本例中我将使用两个。

1-第一个conv层:

我必须提到,在这一层我们必须指定输入的形状,我们使用X.shape [1:]来获取输入数据的形状。我们也选择relu作为激活函数,Python代码如下:

# Conv2D( number_of_filters , kernal_size , input_shape(add this parameter just for the input conv layer))

model.add(Conv2D(64 , (3,3) , input_shape = X.shape[1:] ))

# define the activaion function for this layer

model.add(Activation('relu'))

# define the pooling for this layer

model.add(MaxPooling2D(pool_size= (2,2)))

2-第二个conv层:

model.add(Conv2D(64 , (3,3) ))

# define the activaion function for this layer

model.add(Activation('relu'))

# define the pooling for this layer

model.add(MaxPooling2D(pool_size= (2,2)))

3-现在添加一个dense 层(64个nodes):

但首先你需要flatten 数据,Flatten()用于将3D特征转换为1D特征:

model.add(Flatten())

model.add(Dense(64))

4-现在添加输出层(带1个输出节点):

输出将为0或1。

model.add(Dense(1))

model.add(Activation('sigmoid'))

第4步:

配置训练模型:

损失函数是二元交叉熵

优化器是adam

评分指标将是accuracy

model.compile(loss = 'binary_crossentropy',

optimizer = 'adam',

metrics = ['accuracy'])

然后适合模型,在我们的例子中,我们将使用下一个参数:

  • batch_size = 32
  • 3个epoches
  • 10%的数据用于验证模型

model.fit(X, y, batch_size = 32, epochs = 3, validation_split = 0.1)

现在,如果您想保存它以便以后使用它而不经过前面的步骤,您可以使用以下行:

model.save('myFirstCNN.model')

最后,如果您要打印有关CNN的摘要:

model.summary()

结论:

卷积神经网络是当今必须学习的主题,特别是当我们需要设计一个处理图像作为输入的机器学习(ML)系统时。

相关推荐