如何使用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)系统时。