VGG Convolutional Neural Networks Practical(2)non-linear activation functions

31 篇文章 1 订阅
17 篇文章 0 订阅

第1.2部分:非线性激活函数
如我们在介绍中所述,CNN是通过组成几个不同的功能获得的。 除了前面部分所示的线性滤波器之外,还有几个非线性算子。
问题:CNN中的某些功能必须是非线性的。 为什么?(还真回答不了这个问题······大家说说自己的理解呗,共同交流。)

通过由非线性激活函数遵循线性滤波器来获得最简单的非线性,该非线性激活函数被相同地应用于特征图的每个分量(即逐点地)。 最简单的这种功能是整流线性单元(ReLU)
这里写图片描述
此函数由vl_nnrelu实现; 让我们试试这个:

w = single(repmat([1 0 -1], [1, 1, 3])) ;
w = cat(4, w, -w) ;
y = vl_nnconv(x, w, []) ;
z = vl_nnrelu(y) ;

figure(6) ; clf ; colormap gray ;
subplot(1,2,1) ; vl_imarraysc(y) ;
subplot(1,2,2) ; vl_imarraysc(z) ;

这里写图片描述
任务:

运行上面的代码,了解过滤器w在做什么。
解释最终结果z。
(是做一个响应,然后把差距拉大,这样么···我瞎说的)

VGG16是一种深度卷积神经网络(Convolutional Neural Network, CNN),最初由牛津大学的研究人员开发,用于ImageNet大规模视觉识别挑战。对于车辆分类,使用VGG16作为基础模型的一种常见做法是预训练模型后在其上进行微调。以下是一个使用Keras库实现VGG16车辆分类的简化示例,假设你已经安装了TensorFlow或Keras: ```python # 导入所需的库 import tensorflow as tf from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.optimizers import Adam from tensorflow.keras.preprocessing.image import ImageDataGenerator # 加载预训练的VGG16模型,不包括顶部的全连接层 base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # 冻结基模型的权重,防止在微调过程中改变 for layer in base_model.layers: layer.trainable = False # 添加自定义的全局平均池化层和全连接层 x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) # 假设我们有1024个类别 predictions = Dense(num_classes, activation='softmax')(x) # num_classes是你车辆类别的数量 # 创建新的模型 vehicle_classifier = Model(inputs=base_model.input, outputs=predictions) # 编译模型 vehicle_classifier.compile(optimizer=Adam(lr=0.0001), loss='categorical_crossentropy', metrics=['accuracy']) # 数据增强 train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input, rotation_range=10, width_shift_range=0.1, height_shift_range=0.1, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) val_datagen = ImageDataGenerator(preprocessing_function=preprocess_input) # 加载数据 train_generator = train_datagen.flow_from_directory(train_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical') val_generator = val_datagen.flow_from_directory(val_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical') # 训练模型 history = vehicle_classifier.fit(train_generator, steps_per_epoch=len(train_generator), epochs=num_epochs, validation_data=val_generator, validation_steps=len(val_generator)) # 相关问题-- 1. 在这个代码中,为什么要冻结VGG16的基模型层? 2. 数据增强是如何帮助提高模型性能的? 3. 如何调整学习率或优化器以适应这个特定任务? ``` 请注意,实际应用中你可能需要根据具体的车辆分类数据集和需求调整参数、路径和配置。如果你想要运行完整的代码,可能还需要一些环境配置和数据集导入步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值