搭建神经网络(六步法)

https://www.bilibili.com/video/BV1B7411L7Qt?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click


六步法

一,import:导入相关模块

二,train, test:划分训练集与测试集

三,搭建网络结构逐层描述网络,相当于走了一次前向传播

1,拉直层:tf.keras.layers.Flatten( )

1.1描述

用于将输入层的数据压成一维的数据,一般用再卷积层和全连接层之间(因为全连接层只能接收一维数据,而卷积层可以处理二维数据,就是全连接层处理的是向量,而卷积层处理的是矩阵)

1.2举例
input=keras.layers.Input(shape=[28,28])
layers_Flatten=keras.layers.Flatten(input_shape=[28,28])(input)
layers1=keras.layers.Dense(100,activation='relu')(layers_Flatten)
layers2=keras.layers.Dense(200,activation='relu')(layers1)
layers3=keras.layers.Dense(100,activation='relu')(layers2)
output=keras.layers.Dense(10,activation='softmax')(layers3)

model=keras.models.Model(inputs=[input], outputs=[output])

2,全连接层tf.keras.layers.Dense()

tf.keras.layers.Dense(神经元个数, activation= "激活函数“ ,kernel_regularizer=哪种正则化)

3,卷积层(CBAPD)tf.keras.layers.Conv2D()

3.1经典卷积网络

在这里插入图片描述

3.2描述

特点:卷积计算可认为是一种有效提取图像特征的方法
原理:一般会用一个正方形的卷积核,按指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素 点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项得到输出特征的一个像素点。
在这里插入图片描述

示例:

self.c1 = Conv2D(filters=6, kernel_size=(5, 5), padding='same') 
self.b1 = BatchNormalization()  # BN层
self.a1 = Activation('relu')  # 激活层
self.p1 = MaxPool2D(pool_size=(2, 2), strides=2, padding='same')  
self.d1 = Dropout(0.2)  # dropout层

self.flatten = Flatten()
self.f1 = Dense(128, activation='relu')
self.d2 = Dropout(0.2)
self.f2 = Dense(10, activation='softmax')
3.3CBAPD
model = tf.keras.models.Sequential([
C  		Conv2D(filters=6, kernel_size=(5, 5), padding='same'), # 卷积层
B  		BatchNormalization(), # 批标准化(Batch Normalization, BN)
A  		Activation('relu'), # 激活层
P 		 	MaxPool2D(pool_size=(2, 2), strides=2, padding='same'), # 池化(Pooling)池化用于减少特征数据量
D 	 	Dropout(0.2), # 舍弃,dropout层
])

C:
在这里插入图片描述

B:

A:
对于初学者的建议:
1,首选relu激活函数;
2, 学习率设置较小值;
3,输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布;
4, 初始参数中心化,即让随机生成的参数满足以0为均值
在这里插入图片描述

P:
最大值池化可保留背景特征

tf.keras.layers.MaxPool2D(
pool_size=池化核尺寸,#正方形写核长整数,或(核高h,核宽w)
strides=池化步长,#步长整数, 或(纵向步长h,横向步长w),默认为pool_size
padding=
"valid" or "same" #使用全零填充是“same”,不使用是“valid”(默认)
)

均值池化可提取图片纹理

tf.keras.layers.AveragePooling2D(
pool_size=池化核尺寸,#正方形写核长整数,或(核高h,核宽w)
strides=池化步长,#步长整数, 或(纵向步长h,横向步长w),默认为pool_size
padding=‘valid’or‘same’ #使用全零填充是“same”,不使用是“valid”(默认)
)

D:
在神经网络训练时,将一部分神经元按照一定概率从神经网络中暂时舍弃。神经网络使用时,被舍弃的神经元恢复链接。

4, 循环核tf.keras.layers.SimpleRNN()

# 使x_train符合SimpleRNN输入要求:[送入样本数, 循环核时间展开步 
# 数, 每个时间步输入特征个数]。
# 此处整个数据集送入,送入样本数为len(x_train);输入1个字母出结果,# 循环核时间展开步数为1; 表示为独热码有5个输入特征,每个时间步输入# 特征个数为5
x_train = np.reshape(x_train, (len(x_train), 1, 5))
y_train = np.array(y_train)

model = tf.keras.Sequential([
    SimpleRNN(3),
    Dense(5, activation='softmax')
])

在这里插入图片描述

四,五,六,

在这里插入图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
无刷直流电机(BLDC)是一种高效、可靠且具有较长寿命的电机,适用于许多应用领域,如电动车、无人机、家用电器等。驱动无刷直流电机的步法是一种常见的驱动方式,下面是详细的步骤: 1. 确定相序:BLDC电机由三个相位组成,分别为A相、B相和C相。确定正确的相序非常重要,否则电机将无法正常运转。可以使用霍尔传感器或者反电势检测来确定相序。 2. 选择逆变器:逆变器是将直流电源转换为交流电源的设备。在BLDC电机驱动中,需要使用三相逆变器。逆变器的选择应根据电机的功率和应用需求来确定。 3. PWM信号生成:脉宽调制(PWM)信号用于控制逆变器输出的电流。通过调整PWM信号的占空比,可以控制电机的转速和扭矩。通常使用微控制器或专用的PWM控制芯片来生成PWM信号。 4. 控制算法:控制算法是决定电机如何运转的关键。最常用的算法是步法,也称为“正弦PWM”算法。该算法通过依次激活每个相位来驱动电机,以实现正常的旋转。具体步骤如下: - 步骤1:激活A相,关闭B相和C相; - 步骤2:激活A相和B相,关闭C相; - 步骤3:激活B相,关闭A相和C相; - 步骤4:激活B相和C相,关闭A相; - 步骤5:激活C相,关闭A相和B相; - 步骤6:激活C相和A相,关闭B相; 循环以上个步骤,就可以实现电机的旋转。 5. 相电流控制:为了保证电机的稳定运转,需要对每个相位的电流进行控制。通常使用电流传感器来测量电流,并通过调整PWM信号的占空比来控制电流大小。 6. 速度和位置反馈:为了实现更精确的控制,可以使用速度和位置传感器来反馈电机的转速和位置信息。根据反馈信息,可以动态调整PWM信号和电流控制策略,以实现所需的运动控制效果。 以上就是驱动无刷直流电机的步法。根据实际应用需求和控制算法的选择,可能会有一些细微的差异,但基本原理是相同的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值