主要应用于计算机视觉相关任务,但它能处理的任务并不局限于图像,其实语音识别也是可以使用卷积神经网络。
卷积层 conv2d 参数:ksize 卷积核大小 strides 卷积核移动跨度 padding 边缘填充 非线性层 relu/sigmiod/tanh 池化(下采样)层 pooling2d
最大池化 2.平均池化 全连接层 Dense:w*x+b卷积是指将卷积应用到某个张量的所有点上,通过将卷积核在输入的张量上滑动而生成经过滤波处理的张量。 卷积完成的是对图像特征的提取或者说信息匹配,当一个包含某些特征的图像经过一个卷积核时,一些卷积核被激活,输出特定信号。
一句话概括:把图像变小(减小维度)变厚(特征提取) 卷积神经网络需要四维的图片数据(数量,宽度,高度,通道数)
建立模型
model= tf.keras.Sequential() # 顺序模型 # 第一层使用卷积层,卷积层提取图片特征的能力强 32-fliter个数 (3,3)-卷积核大小,一般使用3*3或5*5 input_shape-图片大小 model.add(tf.keras.layers.Conv2D(64,(3,3),input_shape=train_images.shape[1:],activation='relu',padding='same')) model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same')) # 最大池化层 model.add(tf.keras.layers.MaxPool2D()) # 抑制过拟合 model.add(tf.keras.layers.Dropout(0.5)) # 卷积核以2的指数增长 model.add(tf.keras.layers.Conv2D(128,(3,3),activation='relu',padding='same')) model.add(tf.keras.layers.Conv2D(128,(3,3),activation='relu',padding='same')) # 最大池化层 model.add(tf.keras.layers.MaxPool2D()) # 抑制过拟合 model.add(tf.keras.layers.Dropout(0.5)) model.add(tf.keras.layers.Conv2D(256,(3,3),activation='relu',padding='same')) model.add(tf.keras.layers.Conv2D(256,(3,3),activation='relu',padding='same')) # 抑制过拟合 model.add(tf.keras.layers.Dropout(0.5)) # 全局平均池化:得到一个二维的数据 model.add(tf.keras.layers.GlobalAveragePooling2D()) # Dense 输出层:输出一个维度为10的数据 softmax:输出概率值 model.add(tf.keras.layers.Dense(256,activation='relu')) model.add(tf.keras.layers.Dense(10,activation='softmax')) model.summary() # 对模型进行配置 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc']) # 训练 history = model.fit(train_images,train_labels,epochs=30,validation_data = (test_images,test_labels)) history.history.keys() plt.plot(history.epoch,history.history.get('acc'),label='acc') plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc') plt.legend() plt.plot(history.epoch,history.history.get('loss'),label='loss') plt.plot(history.epoch,history.history.get('val_loss'),label='val_loss') plt.legend()