这些激活函数可以作为CNN模型中的非线性变换函数,用于增加网络的表达能力。
步骤:
- 选择一个归一化的范围,一般是[0,1]或[-1,1]。
- 例如,我们选择[0,1]作为范围,然后找到数据集的最小值(min)和最大值(max)。
- 对于每个数据点,使用以下公式计算归一化后的值: normalized_value = (data_point - min) / (max - min)【(当前数据点-最小值点)/(最大-最小)】
公式:
其中,n为样本数量,y_true为真实值,y_pred为模型预测值,Σ表示对所有样本求和。
(2)交叉熵(Cross Entropy): 交叉熵是一种衡量概率分布之间差异的函数,用于多分类问题的损失函数。【用于衡量两个概率分布之间差异】
其中,y_true为真实标签(取值为0或1),y_pred为模型预测的概率值(范围在0到1之间),log为自然对数函数。
假设有一个二分类问题,有一个样本的真实标签为1,模型预测的概率为0.8。代入真实标签y_true=1和预测概率y_pred=0.8,就可以计算二分类交叉熵的值:Binary Cross Entropy = - (1 * log(0.8) + (1 - 1) * log(1 - 0.8)) = - (1 * log(0.8) + 0 * log(0.2)) = - log(0.8) ≈ 0.223。交叉熵值越小,表示模型的预测结果越接近真实情况。
在机器学习和深度学习中,模型往往具有大量的参数,通过优化算法可以自动调整这些参数,使模型能够更好地拟合训练数据,并在未见过的新数据上具有更好的泛化能力。优化算法的目标是最小化损失函数,从而提高模型的预测准确性和性能。
拟合是指通过拟合函数曲线来逼近已知数据点的过程。
最小二乘法是一种用于拟合数据的数学方法。它的基本思想是找到一条曲线或者函数,使得该曲线与给定的数据点之间的距离最小。
下面举一个简单的例子来演示最小二乘法的过程:
假设有一组数据点(1, 2),(2, 3),(3, 4),(4, 5),(5, 6),我们希望通过最小二乘法找到一条直线来拟合这些数据点。
举个简单例子,假设有以下数据点:
x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 9, 11]
我们可以假设这些数据点满足线性关系,即 y = mx + c,其中 m 是斜率, c 是截距。我们的目标是找到最佳的 m 和 c 的值,使得拟合函数能够最好地逼近这些数据点。在这个例子中,我们可以使用最小二乘法进行拟合。最小二乘法的目标是最小化实际观测值与拟合函数预测值之间的平方差。具体来说,我们需要找到 m 和 c 的值,使得误差的平方和最小。通过求解最小二乘问题,我们可以得到最佳的 m 和 c 的值。在这个例子中,最佳的拟合函数为 y = 2x + 1。当我们把这个拟合函数应用于新的 x 值时,可以得到预测的 y 值,从而实现对未知数据的预测。
详细的该过程如下:
- 计算数据点的个数 n。
- 计算 x 和 y 的平均值:mean_x = (1+2+3+4+5)/5 = 3,mean_y = (3+5+7+9+11)/5 = 7。
- 计算 x 和 y 的差值:dx = [1-3, 2-3, 3-3, 4-3, 5-3] = [-2, -1, 0, 1, 2],dy = [3-7, 5-7, 7-7, 9-7, 11-7] = [-4, -2, 0, 2, 4]。
- 计算 dx 和 dy 的乘积之和:sum_dx_dy = (-2)(-4) + (-1)(-2) + 00 + 12 + 2*4 = 14。
- 计算 dx 的平方和:sum_dx_squared = (-2)^2 + (-1)^2 + 0^2 + 1^2 + 2^2 = 10。
- 计算斜率 m:m = sum_dx_dy / sum_dx_squared = 14 / 10 = 1.4。
- 计算截距 c:c = mean_y - m * mean_x = 7 - 1.4 * 3 = 2.8。
线性拟合的结果为 y = 1.4x + 2.8。通过这个拟合函数,我们可以预测新的 x 值获得对应的 y 值。
假设有以下数据点:x = [1, 2, 3, 4, 5] y = [1.2, 3.5, 9.1, 16.9, 28.3]
我们可以假设这些数据点满足二次多项式关系,即 y = ax^2 + bx + c,其中 a、b、c 是多项式的系数。我们的目标是找到最佳的 a、b、c 的值,使得拟合函数能够最好地逼近这些数据点。多项式拟合的计算过程可以通过最小二乘法来求解最佳的拟合参数。具体而言,我们需要找到 a、b、c 的值,使得误差的平方和最小。
计算步骤如下:
- 假设初始的参数值为 a = 1,b = 1,c = 1。
- 对于每个数据点 (xi, yi),计算拟合函数的预测值 y_pred = axi^2 + bxi + c。
- 计算每个数据点的误差:error = yi - y_pred。
- 计算误差的平方和:sum_squared_error = (error1)^2 + (error2)^2 + ... + (errorn)^2。
- 根据最小二乘法的原理,我们需要找到能够最小化 sum_squared_error 的 a、b、c 的值。
- 使用优化算法,如梯度下降法或牛顿法,调整参数 a、b、c 的值,重复步骤 2-5,直到找到最佳的拟合参数。
通过多项式拟合计算,最终可以得到最佳的 a、b、c 的值,从而得到多项式拟合的函数表达式。需要注意的是,多项式阶数的选择也会影响拟合效果,过高的阶数可能会导致过拟合,而过低的阶数可能会导致欠拟合。因此,在实际应用中,需要进行模型选择和评估来找到最合适的多项式阶数。
假设有以下数据点:x = [1, 2, 3, 4, 5] y = [3.2, 7.5, 18.1, 39.9, 85.3]
我们可以假设这些数据点满足指数关系,即 ,其中 a 是指数函数的缩放因子, b 是指数函数的指数。我们的目标是找到最佳的 a 和 b 的值,使得拟合函数能够最好地逼近这些数据点。非线性拟合通常也使用最小二乘法来求解最佳的拟合参数。具体而言,我们需要找到 a 和 b 的值,使得误差的平方和最小。
计算步骤如下:
- 假设初始的参数值为 a = 1 和 b = 1。
- 对于每个数据点 (xi, yi),计算拟合函数的预测值 y_pred = ae^(bx)。
- 计算每个数据点的误差:error = yi - y_pred。
- 计算误差的平方和:sum_squared_error = (error1)^2 + (error2)^2 + ... + (errorn)^2。
- 根据最小二乘法的原理,我们需要找到能够最小化 sum_squared_error 的 a 和 b 的值。
- 使用优化算法,如梯度下降法或牛顿法,调整参数 a 和 b 的值,重复步骤 2-5,直到找到最佳的拟合参数。
这里随便搜一张图当例子吧,就下面这张,我随便搜的,你们想用别的也可以~我随便搜了一张.jpeg文件,大小是300×300的,命名为test保存在桌面(我习惯了,想存别的盘也可以滴~),然后先导入思密达~
def random_flip(image):
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
return flipped_image
def random_flip(image):
flip = random.choice([Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM])
flipped_image = image.transpose(flip)
return flipped_image
# 随机裁剪
def random_crop(image, size):
width, height = image.size
crop_width, crop_height = size
x = random.randint(0, width - crop_width)
y = random.randint(0, height - crop_height)
cropped_image = image.crop((x, y, x+crop_width, y+crop_height))
return cropped_image
# 定义裁剪后的尺寸
crop_size = (200, 200)
# 随机旋转
def random_rotation(image, angle_range):
angle = random.uniform(-angle_range, angle_range)
rotated_image = image.rotate(angle)
return rotated_image
# 定义旋转角度范围
angle_range = 30
# 随机缩放
def random_scaling(image, scale_range):
scale = random.uniform(scale_range[0], scale_range[1])
width, height = image.size
new_width = int(width * scale)
new_height = int(height * scale)
scaled_image = image.resize((new_width, new_height))
return scaled_image
# 定义缩放范围
scale_range = (1.0, 2.0)
# 随机噪声添加
def random_noise(image, noise_level):
width, height = image.size
pixels = np.array(image)
noise = np.random.randint(-noise_level, noise_level, (height, width, 3))
noisy_image = np.clip(pixels + noise, 0, 255).astype(np.uint8)
noisy_image = Image.fromarray(noisy_image)
return noisy_image
# 定义噪声级别
noise_level = 30
# 随机亮度调整
def random_brightness(image, brightness_level):
pixels = np.array(image)
brightness = np.random.randint(-brightness_level, brightness_level)
brightened_image = np.clip(pixels + brightness, 0, 255).astype(np.uint8)
brightened_image = Image.fromarray(brightened_image)
return brightened_image
# 定义亮度调整级别
brightness_level = 50
# 随机颜色调整
def random_color(image, color_level):
pixels = np.array(image)
color_adjustment = np.random.randint(-color_level, color_level, size=3)
adjusted_image = np.clip(pixels + color_adjustment, 0, 255).astype(np.uint8)
adjusted_image = Image.fromarray(adjusted_image)
return adjusted_image
# 定义颜色调整级别
color_level = 50