当前位置: 首页 > news >正文

神经网络解决回归问题(更新ing)

神经网络应用于回归问题

  • 优势是什么???
  • 生成数据集:
  • 通用神经网络拟合函数
  • 调整不同参数对比结果
    • 初始代码结果
    • 调整神经网络结构
    • 调整激活函数
    • 调整迭代次数
    • 增加早停法
    • 变量归一化处理
    • 正则化系数调整
    • 学习率调整
  • 总结ing
    • fnn.py进行计算:
  • 破案了。。

优势是什么???

神经网络是处理回归问题的强大工具,它们能够学习输入数据和输出之间的复杂关系。

神经网络提供了一种灵活且强大的框架,用于建模和预测回归问题。通过 适当的 网络结构训练策略正则化技术,可以有效地从数据中学习并做出准确的预测。

在实际应用中,选择合适的网络架构参数对于构建一个高效的回归模型至关重要

所以说,虽然神经网络是处理回归问题的强大工具,但是也存在很多问题,需要我们掌握很多方法技巧才能建立一个高效准确的回归模型:(实际上,掌握这些技巧的使用方法其实仍然无法把模型训练的很好,构建一个好的模型最重要的其实是对这个问题本质的理解)

  • 正则化(Regularization): 为了防止过拟合,可以在损失函数中添加正则化项,如L1或L2正则化。
  • Dropout: 这是一种技术,可以在训练过程中随机地丢弃一些神经元的激活,以减少模型对特定神经元的依赖。
  • 批量归一化(Batch Normalization): 通过对每一层的输入进行归一化处理,可以加速训练过程并提高模型的稳定性。
  • 早停(Early Stopping): 当验证集上的性能不再提升时,停止训练以避免过拟合。
  • 超参数调整(Hyperparameter Tuning): 通过调整网络结构(如层数每层的神经元数量)和学习率等超参数,可以优化模型的性能。

生成数据集:

输入数据:
X 1 = 100 × N ( 1 , 1 ) X_{1} = 100 \times \mathcal{N}(1, 1) X1=100×N(1,1)
X 2 = N ( 1 , 1 ) 10 X_{2} = \frac{\mathcal{N}(1, 1) }{10} X2=10N(1,1)
X 3 = 10000 × N ( 1 , 1 ) X_{3} = 10000 \times \mathcal{N}(1, 1) X3=10000×N(1,1)
输出数据 Y Y Y Y 1 Y_1 Y1:
Y = 6 X 1 − 3 X 2 + X 3 2 + ϵ Y = 6X_{1} - 3X_2 + X_3^2 + \epsilon Y=6X13X2+X32+ϵ

Y 1 = X 1 ⋅ X 2 − X 1 X 3 + X 3 X 2 + ϵ 1 Y_1 = X_1 \cdot X_2 - \frac{X_1}{X_3} + \frac{X_3}{X_2} + \epsilon_1 Y1=X1X2X3X1+X2X3+ϵ1
其中, ϵ 1 \epsilon_1 ϵ1 是均值为0,方差为0.1的正态分布噪声。

请注意,这里的 N ( μ , σ 2 ) {N}(\mu, \sigma^2) N(μ,σ2) 表示均值为 μ \mu μ ,方差为 σ 2 \sigma^2 σ2的正态分布。

下面是生成数据集的代码:

# 生成测试数据
import numpy as np
import pandas as pd
# 训练集和验证集样本总个数
sample = 2000
train_data_path = 'train.csv'
validate_data_path = 'validate.csv'
predict_data_path = 'test.csv'# 构造生成数据的模型
X1 = np.zeros((sample, 1))
X1[:, 0] = np.random.normal(1, 1, sample) * 100
X2 = np.zeros((sample, 1))
X2[:, 0] = np.random.normal(2, 1, sample) / 10
X3 = np.zeros((sample, 1))
X3[:, 0] = np.random.normal(3, 1, sample) * 10000# 模型
Y = 6 * X1 - 3 * X2 + X3 * X3 + np.random.normal(0, 0.1, [sample, 1])
Y1 = X1 * X2 - X1 / X3 + X3 / X2 + np.random.normal(0, 0.1, [sample, 1])# 将所有生成的数据放到data里面
data = np.zeros((sample, 5))
data[:, 0] = X1[:, 0]
data[:, 1] = X2[:, 0]
data[:, 2] = X3[:, 0]
data[:, 3] = Y[:, 0]
data[:, 4] = Y1[:, 0]# 将data分成测试集和训练集
num_traindata = int(0.8*sample)# 将训练数据保存
traindata = pd.DataFrame(data[0:num_traindata, :], columns=['x1', 'x2', 'x3', 'y', 'y1'])
traindata.to_csv(train_data_path, index=False)
print('训练数据保存在: ', train_data_path)# 将验证数据保存
validate_data = pd.DataFrame(data[num_traindata:, :], columns=['x1', 'x2', 'x3', 'y', 'y1'])
validate_data.to_csv(validate_data_path, index=False)
print('验证数据保存在: ', validate_data_path)# 将预测数据保存
predict_data = pd.DataFrame(data[num_traindata:, 0:-2], columns=['x1', 'x2', 'x3'])
predict_data.to_csv(predict_data_path, index=False)
print('预测数据保存在: ', predict_data_path)

通用神经网络拟合函数

要根据生成的数据集建立回归模型应该如何实现呢?对于这样包含非线性的方程,直接应用通用的神经网络模型可能效果并不好,就像这样:

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pdclass FNN(nn.Module):def __init__(self,Arc,func,device):super(FNN, self).__init__()  # 调用父类的构造函数self.func = func # 定义激活函数self.Arc = Arc # 定义网络架构self.device = deviceself.model = self.create_model().to(self.device)# print(self.model)def create_model(self):layers = []for ii in range(len(self.Arc) - 2):  # 遍历除最后一层外的所有层layers.append(nn.Linear(self.Arc[ii], self.Arc[ii + 1], bias=True))layers.append(self.func)  # 添加激活函数if ii < len(self.Arc) - 3:  # 如果不是倒数第二层,添加 Dropout 层layers.append(nn.Dropout(p=0.1))layers.append(nn.Linear(self.Arc[-2], self.Arc[-1], bias=True))  # 添加最后一层return nn.Sequential(*layers)def forward(self,x):out = self.model(x)return outif __name__ == "__main__":# 定义网络架构和激活函数Arc = [3, 10, 20, 20, 20, 10, 2]func = nn.ReLU()  # 选择ReLU激活函数device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')  # 根据是否有GPU来选择设备# 创建FNN模型实例model = FNN(Arc, func, device)# 定义损失函数和优化器criterion = nn.MSELoss()  # 均方误差损失函数optimizer = optim.Adam(model.parameters(), lr=0.001)  # 使用Adam优化器# 训练数据train_data_path = 'train.csv'train_data = pd.read_csv(train_data_path)features = np.array(train_data.iloc[:, :-2])labels = np.array(train_data.iloc[:, -2:])#转换成张量inputs_tensor = torch.from_numpy(features).float().to(device)  # 转换为浮点张量labels_tensor = torch.from_numpy(labels).float().to(device)  # 如果标签是数值型数loss_history = []# 训练模型for epoch in range(20000):optimizer.zero_grad()  # 清空之前的梯度outputs = model(inputs_tensor)  # 前向传播loss = criterion(outputs, labels_tensor)  # 计算损失loss_history.append(loss.item())  # 将损失值保存在列表中loss.backward()  # 反向传播optimizer.step()  # 更新权重if epoch % 1000 == 0:print('epoch is', epoch, 'loss is', loss.item(), )import matplotlib.pyplot as pltloss_history = np.array(loss_history)plt.plot(loss_history)plt.xlabel = ('epoch')plt.ylabel = ('loss')plt.show()torch.save(model, 'model\entire_model.pth')

应用这个代码得到的损失随迭代次数变化曲线如图:
在这里插入图片描述
这损失值也太大了!!!
那么应该如何修改神经网络模型使其损失函数降低呢?


修改神经网络:考虑归一化早停

早停方法是跟这位大佬学习的:
早停方法

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScalerfrom pytorchtools import EarlyStoppingclass FNN(nn.Module):def __init__(self,Arc,func,device):super(FNN, self).__init__()  # 调用父类的构造函数self.func = func # 定义激活函数self.Arc = Arc # 定义网络架构self.device = deviceself.model = self.create_model().to(self.device)# print(self.model)def create_model(self):layers = []for ii in range(len(self.Arc) - 2):  # 遍历除最后一层外的所有层layers.append(nn.Linear(self.Arc[ii], self.Arc[ii + 1], bias=True))layers.append(self.func)  # 添加激活函数if ii < len(self.Arc) - 3:  # 如果不是倒数第二层,添加 Dropout 层layers.append(nn.Dropout(p=0.1))layers.append(nn.Linear(self.Arc[-2], self.Arc[-1], bias=True))  # 添加最后一层return nn.Sequential(*layers)def forward(self,x):out = self.model(x)return outif __name__ == "__main__":# 定义网络架构和激活函数Arc = [3, 10, 20, 20, 20, 20, 20, 20, 10, 2]func = nn.ReLU()  # 选择ReLU激活函数device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')  # 根据是否有GPU来选择设备# 创建FNN模型实例model = FNN(Arc, func, device)# 定义损失函数和优化器criterion = nn.MSELoss()  # 均方误差损失函数optimizer = optim.Adam(model.parameters(), lr=1e-4)  # 使用Adam优化器# 训练数据train_data_path = 'train.csv'train_data = pd.read_csv(train_data_path)feature = np.array(train_data.iloc[:, :-2])label = np.array(train_data.iloc[:, -2:])# 对特征进行Z得分归一化feature_scaler = StandardScaler()features = feature_scaler.fit_transform(feature)features_means = feature_scaler.mean_features_stds = feature_scaler.scale_# 对标签进行Z得分归一化label_scaler = StandardScaler()labels = label_scaler.fit_transform(label)label_means = torch.tensor(label_scaler.mean_).float().to(device)label_stds = torch.tensor(label_scaler.scale_).float().to(device)#转换成张量inputs_tensor = torch.from_numpy(features).float().to(device)  # 转换为浮点张量labels_tensor = torch.from_numpy(labels).float().to(device)  # 如果标签是数值型数label_tensor = torch.from_numpy(label).float().to(device)  # 如果标签是数值型数loss_history = []# parser.add_argument('--patience', default=20, type=int, help='patience')early_stopping = EarlyStopping(patience=20, verbose=True)# 训练模型for epoch in range(2000):optimizer.zero_grad()  # 清空之前的梯度output = model(inputs_tensor)  # 前向传播# 反归一化outputs = (output * label_stds) + label_meansloss = criterion(outputs, label_tensor)  # 计算损失loss_history.append(loss.item())  # 将损失值保存在列表中loss.backward()  # 反向传播optimizer.step()  # 更新权重if epoch % 100 == 0:print('epoch is', epoch, 'loss is', loss.item(), )early_stopping(loss, model)if early_stopping.early_stop:print("early stopping")breakimport matplotlib.pyplot as pltloss_history = np.array(loss_history)plt.plot(loss_history)plt.xlabel = ('epoch')plt.ylabel = ('loss')plt.show()torch.save(model, 'model\entire_model.pth')

运行结果是这样的:
在这里插入图片描述

损失值还是特别大。。。。。


调整不同参数对比结果

应用这些方法技巧之后,损失值其实变化并没有很大,那到底应该怎么处理才可以呢?

难道是输入输出之间的关系太复杂了??

我重新调整输入输出关系,去掉噪点:


sample = 3000
X1 = np.zeros((sample, 1))
X1[:, 0] = np.random.normal(1, 1, sample)
X2 = np.zeros((sample, 1))
X2[:, 0] = np.random.normal(2, 1, sample)
X3 = np.zeros((sample, 1))
X3[:, 0] = np.random.normal(3, 1, sample)# 模型
Y = 60 * X1 - 300 * X2 + X3 * 560

直接用这个线性的公式

初始代码结果

运行fnn_easy.py:

在这里插入图片描述

输出结果:::

epoch is 0 loss is 1691248.25
epoch is 1000 loss is 1261221.5
epoch is 2000 loss is 951328.4375
epoch is 3000 loss is 727150.8125
epoch is 4000 loss is 573457.9375
epoch is 5000 loss is 478112.90625
epoch is 6000 loss is 428555.1875
epoch is 7000 loss is 409844.65625
epoch is 8000 loss is 405917.53125
epoch is 9000 loss is 405627.59375
Test loss: 869377.875

调整神经网络结构

神经网络结构[3, 20, 20, 20, 20, 20, 2],增加层数或者神经元数量
变成这个样子:

Arc = [3, 10, 20, 20, 20, 20, 20, 20, 20, 20, 1]

输出结果::
在这里插入图片描述
迭代7000次感觉就平缓了??

epoch is 0 loss is 1691888.625
epoch is 1000 loss is 1262176.625
epoch is 2000 loss is 952115.4375
epoch is 3000 loss is 727737.125
epoch is 4000 loss is 573853.3125
epoch is 5000 loss is 478343.09375
epoch is 6000 loss is 428659.3125
epoch is 7000 loss is 409874.03125
epoch is 8000 loss is 405920.875
epoch is 9000 loss is 405627.6875
Test loss: 869377.0625

测试集损失好大,感觉训练集过拟合了??但是这过拟合损失值怎么还这么大啊
改了网络结构,几乎没有变化。。。。。

/(ㄒoㄒ)/~~

调整激活函数

尝试sigmond、tanh、relu激活函数

  • relu结果:
    在这里插入图片描述
    训练集损失值下降的这么快!!!但是到后面怎么基本不变了呀?
epoch is 0 loss is 1691534.125
epoch is 1000 loss is 7115.28857421875
epoch is 2000 loss is 4782.103515625
epoch is 3000 loss is 2784.762451171875
epoch is 4000 loss is 2546.99072265625
epoch is 5000 loss is 1512.3265380859375
epoch is 6000 loss is 1262.20556640625
epoch is 7000 loss is 1113.3638916015625
epoch is 8000 loss is 979.3409423828125
epoch is 9000 loss is 995.0311279296875
Test loss: 637214.0

训练集的损失值降低了,但是测试集损失值怎么还是这么高????

  • 换成tanh试试::
    在这里插入图片描述
    训练集损失值下降的比较平缓
epoch is 0 loss is 1691698.125
epoch is 1000 loss is 1255924.75
epoch is 2000 loss is 930623.8125
epoch is 3000 loss is 681349.75
epoch is 4000 loss is 492137.4375
epoch is 5000 loss is 350489.28125
epoch is 6000 loss is 246078.875
epoch is 7000 loss is 170598.15625
epoch is 8000 loss is 117428.3203125
epoch is 9000 loss is 79978.34375
Test loss: 704667.75

测试集损失值和训练的差不多,但是还是太大了吧。。/(ㄒoㄒ)/~~

调整迭代次数

从10000改到100000
在这里插入图片描述

……
epoch is 96000 loss is 817.8455200195312
epoch is 97000 loss is 888.3745727539062
epoch is 98000 loss is 938.8643798828125
epoch is 99000 loss is 741.688232421875
Test loss: 644070.5

增加早停法

似乎没有必要,因为损失值一直很大
在这里插入图片描述

…
Validation loss decreased (405623.906250 --> 405623.906250).  Saving model ...
…
EarlyStopping counter: 39 out of 40
EarlyStopping counter: 40 out of 40
early stopping
Test loss: 869326.5625

早停几乎没有起作用。基本也是迭代到10000才停下来

变量归一化处理

这里输入数据在同一数量级,其实不需要进行归一化处理。
在这里插入图片描述

epoch is 0 loss is 435491.9375
epoch is 1000 loss is 10410.7548828125
epoch is 2000 loss is 5559.599609375
epoch is 3000 loss is 4180.0361328125
epoch is 4000 loss is 2995.7177734375
epoch is 5000 loss is 1987.0074462890625
epoch is 6000 loss is 2300.583251953125
epoch is 7000 loss is 1547.3831787109375
epoch is 8000 loss is 1220.7880859375
epoch is 9000 loss is 1113.998779296875
Test loss: 847746.5625

看起来训练集的损失值很小了,但是测试集损失值这么大,应该是过拟合了。为啥损失值这么大还会过拟合/(ㄒoㄒ)/~~

正则化系数调整

考虑增加正则化系数,使用Dropout,
正则化应该很有必要,试试看哈、系数0.1→0.3
在这里插入图片描述

epoch is 0 loss is 1691138.75
epoch is 1000 loss is 1263657.625
epoch is 2000 loss is 953652.375
epoch is 3000 loss is 728953.6875
epoch is 4000 loss is 574693.625
epoch is 5000 loss is 478837.53125
epoch is 6000 loss is 428884.21875
epoch is 7000 loss is 409937.78125
epoch is 8000 loss is 405928.15625
epoch is 9000 loss is 405627.78125
Test loss: 603928.75

系数→0.5试试看
在这里插入图片描述

epoch is 0 loss is 1690641.875
epoch is 1000 loss is 1259986.5
epoch is 2000 loss is 950166.9375
epoch is 3000 loss is 726251.125
epoch is 4000 loss is 572842.4375
epoch is 5000 loss is 477752.59375
epoch is 6000 loss is 428392.0
epoch is 7000 loss is 409798.75
epoch is 8000 loss is 405912.375
epoch is 9000 loss is 405627.96875
Test loss: 616781.9375

和0.3似乎没什么变化,那么把epoch变大一点看看:
在这里插入图片描述

epoch is 0 loss is 1691865.875
epoch is 1000 loss is 1259460.75
epoch is 2000 loss is 949569.0625
epoch is 3000 loss is 725770.8125
epoch is 4000 loss is 572510.1875
epoch is 5000 loss is 477556.375
epoch is 6000 loss is 428302.96875
epoch is 7000 loss is 409773.96875
epoch is 8000 loss is 405909.4375
epoch is 9000 loss is 405625.90625
epoch is 10000 loss is 405623.9375
epoch is 11000 loss is 132178.5
epoch is 12000 loss is 88326.0703125
epoch is 13000 loss is 72454.6640625
epoch is 14000 loss is 58360.8125
epoch is 15000 loss is 50380.35546875
epoch is 16000 loss is 44466.1875
epoch is 17000 loss is 43652.4765625
Test loss: 758716.4375

不如不增加epoch,损失值更大了。

学习率调整

尝试调整学习率,直接加入自适应调整学习率,也还是不行
在这里插入图片描述

Epoch  8370: reducing learning rate of group 0 to 5.1200e-09.
epoch is 9000 loss is 405878.09375
Epoch 9001, Current Learning Rate: 5.120000000000003e-09
Test loss: 851336.625

还是不行。。。。。。。。。。所以到底应该怎么调整啊?????


总结ing

调整方法训练损失值
调整神经网络结构405627
调整激活函数relu995
调整激活函数tanh79978
调整迭代次数741
增加早停法405623
变量归一化处理1113
正则化系数调整405627
学习率调整405878

从上表可以看出,合适的激活函数、增加迭代次数、对变量进行归一化处理会降低训练集的损失值。

增加迭代次数,训练集损失值降低效果最明显,但是也同时增加了过拟合风险

可以看到relu激活函数的效果比较好,训练集损失值较小

对变量进行归一化处理,

调整方法测试损失值
调整神经网络结构869377
调整激活函数relu637214
调整激活函数tanh704667
调整迭代次数644070
增加早停法869326
变量归一化处理847746
正则化系数调整603928
学习率调整851336

提高正则化的系数,可以尽量避免过拟合,所以在测试集里的损失值是最低的,泛化效果较好一些。如果测试集损失值比训练集损失值差太多,一定要加入正则化。

调整合适的激活函数也能降低测试集的损失值。

增加迭代次数也能降低测试集的损失值。但是增加迭代次数会提高计算成本,我这里是10000次增加到100000次,运算时间增加了很长时间。

fnn.py进行计算:

输出结果是

epoch is 99970 loss is 1.0438059568405151
Epoch 99971, Current Learning Rate: 0.01
epoch is 99980 loss is 2.225820541381836
Epoch 99981, Current Learning Rate: 0.01
epoch is 99990 loss is 0.6199669241905212
Epoch 99991, Current Learning Rate: 0.01
Test loss: 828622.4375

训练集几乎没有损失,但是测试集是什么鬼????损失值这么大!!!

破案了。。

绘制 validate_outputs(预测值)和 validate_labels_tensor(真实值)

测试集损失值这么大,原来是有异常值!!!!

不是模型没有很好地学习到数据的特征,或者在验证集上过拟合了。。而是有异常值。

MSE 损失函数的一个优点是它能够惩罚较大的预测误差,因为误差的平方会随着误差的增加而显著增加。然而,它也有缺点,比如对于异常值比较敏感,因为较大的误差会对总体 MSE 有更大的影响。

我用的就是均方误差(MSE)损失函数,,,难怪算的损失值一直这么大。。

import matplotlib.pyplot as plt# 假设 validate_outputs 和 validate_labels_tensor 都是一维张量
# 并且它们的形状相同,即每个预测值对应一个真实值# 绘制散点图,其中 x 轴是真实值,y 轴是预测值
plt.scatter(validate_labels_tensor.cpu().numpy(), validate_outputs.cpu().numpy())# 添加标题和轴标签
plt.title('Predicted vs Actual')
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')# 绘制 y=x 线,表示完美的预测
plt.plot([validate_labels_tensor.min().cpu().numpy(), validate_labels_tensor.max().cpu().numpy()], [validate_labels_tensor.min().cpu().numpy(), validate_labels_tensor.max().cpu().numpy()], color='red')# 显示图表
plt.show()

在这里插入图片描述

在这里插入图片描述

相关文章:

神经网络解决回归问题(更新ing)

神经网络应用于回归问题 优势是什么&#xff1f;&#xff1f;&#xff1f;生成数据集&#xff1a;通用神经网络拟合函数调整不同参数对比结果初始代码结果调整神经网络结构调整激活函数调整迭代次数增加早停法变量归一化处理正则化系数调整学习率调整 总结ingfnn.py进行计算&am…...

【小红书校招场景题】12306抢票系统

1 坐过高铁吧&#xff0c;有抢过票吗。你说说抢票系统对于后端开发人员而言会有哪些情况&#xff1f; 对于后端开发人员来说&#xff0c;开发和维护一个高铁抢票系统&#xff08;如中国的12306&#xff09;会面临一系列的挑战和情况。这些挑战主要涉及系统的性能、稳定性、数据…...

Spring(三)

1. Spring单例Bean是不是线程安全的? Spring单例Bean默认并不是线程安全的。由于多个线程可能访问同一份Bean实例&#xff0c;当Bean的内部包含了可变状态&#xff08;mutable state&#xff09;即有可修改的成员变量时&#xff0c;就可能出现线程安全问题。Spring容器不会自动…...

使用element-plus中的表单验证

标签页代码如下&#xff1a; // 注意&#xff1a;el-form中的数据绑定不可以用v-model&#xff0c;要使用:model <el-form ref"ruleFormRef" :rules"rules" :model"userTemp" label-width"80px"><el-row :gutter"20&qu…...

flinksql

Flink SQL 是 Apache Flink 项目中的一个重要组成部分,它允许开发者使用标准的 SQL 语言来处理流数据和批处理数据。Flink SQL 提供了一种声明式的编程范式,使得用户能够以一种简洁、高效且易于理解的方式来表达复杂的数据处理逻辑。 ### 背景 Flink SQL 的设计初衷是为了简…...

Dockerfile中 CMD和ENTRYPOINT的区别

在 Dockerfile 中&#xff0c;CMD 和 ENTRYPOINT 都用于指定容器启动时要执行的命令。它们之间的主要区别是&#xff1a; - CMD 用于定义容器启动时要执行的命令和参数&#xff0c;它设置的值可以被 Dockerfile 中的后续指令覆盖&#xff0c;包括在运行容器时传递的参数。如果…...

【TC3xx芯片】TC3xx芯片的总线内存保护

前言 广义上的内存保护,包括<<【TC3xx芯片】TC3xx芯片MPU介绍>>一文介绍的MPU(常规狭义上的内存保护),<<【TC3xx芯片】TC3xx芯片的Endinit功能详解>>一文中介绍的寄存器的EndInit保护,<<【TC3xx芯片】TC3xx芯片ACCEN寄存器保护详解>>一…...

抖音小店选品必经五个阶段,看你到哪一步了,直接决定店铺爆单率

大家好&#xff0c;我是电商笨笨熊 新手选品必经的阶段就是迷茫期&#xff0c;不知道怎么选品&#xff0c;在哪里选品&#xff0c;选择什么样的品&#xff1b; 而有些玩家也会在进入店铺后疯狂选品&#xff0c;但是上架的商品没有销量&#xff1b; 而这些都是每个玩家都要经…...

ML在骨科手术术前、书中、术后方法应用综述【含数据集】

达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…...

vue3-video-play 在安卓上正常播放,在ios上不能播放,问题解决

1.ios上autoplay需要静音&#xff0c;在播放后再打开声音 <vue3videoPlay v-if"!isComponent" v-bind"options" :playsinline"playsinline"></vue3videoPlay>let playsinline computed(() > {if (props.isComponent) {return}o…...

【C++类和对象】上篇

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

微信订阅号环境搭建及开发者工具下载

目录 一、注册订阅号 1.1 选择注册 2.2 选择订阅号注册 1.3 登录进入主页面 ​编辑 1.4 可以进行自定义菜单 1.5 我们重点关注公众平台测试账号 ​编辑 1.6 自定义一个域名 1.7 用自己的微信扫描这个二维码 ​编辑 1.8 点击修改&#xff0c;并自定义个域名 二、开发…...

Failed to resolve ‘bss.myhuaweicloud.com‘ ([Errno -2] Name or service not know

Failed to resolve ‘bss.myhuaweicloud.com’ ([Errno -2] Name or service not know 解決方案&#xff1a; 修改/etc/resolv.conf文件来指定DNS服务器&#xff0c;例如添加Google的公共DNS服务器&#xff1a; nameserver 8.8.8.8 nameserver 8.8.4.4...

大厂基础面试题(之二)

Q1&#xff1a;flex布局 Flex布局容器属性包括&#xff1a; flex-direction: 定义主轴的方向&#xff0c;决定flex容器中的子元素的排列方式 flex-wrap&#xff1a;设置子元素是否换行 flex-flow&#xff1a;是flex-direction和flex-wrap的简写形式&#xff0c;用于设置容器的排…...

swiftui macOS实现加载本地html文件

import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")HTMLView(htmlFileName: "localfile") // 假设你的本地 HTML 文件名为 index.html.frame(minWidth: 100, minHeight: 100) // 设置 HTMLView 的最小尺寸…...

科技云报道:大模型加持后,数字人“更像人”了吗?

科技云报道原创。 北京冬奥运AI 虚拟人手语主播、杭州亚运会数字人点火、新华社数字记者、数字航天员小诤…当随着越来越多数字人出现在人们生活中&#xff0c;整个数字人行业也朝着多元化且广泛的应用方向发展&#xff0c;快速拓展到不同行业、不同场景。 面向C端&#xff0…...

轻松驾驭时间流:MYSQL日期与时间函数的实用技巧

​&#x1f308; 个人主页&#xff1a;danci_&#x1f525; 系列专栏&#xff1a;《MYSQL应用》&#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 轻松驾驭时间流&#xff1a;MYSQL日期与时间函数的实用技巧 MYSQL日期时间函数是数据库操作中不可…...

如何在极狐GitLab 使用Docker 仓库功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…...

streamlit 大模型前段界面

结合 langchain 一起使用的工具&#xff0c;可以显示 web 界面 pip install streamlit duckduckgo-search 运行命令 streamlit run D:\Python_project\NLP\大模型学习\test.py import os from dotenv import load_dotenv from langchain_community.llms import Tongyi load…...

K8s 命令行工具

文章目录 K8s 命令行工具kubectl 工具在任意节点使用kubectl方式创建对象命令显示和查找资源更新资源修补资源编辑资源Scale 资源删除资源查看pod信息节点相关操作 K8s 命令行工具 在搭建集群的时候&#xff0c;我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具&…...

优先级队列

优先级队列的基本使用 模拟实现上面的接口函数&#xff0c;优先级队列不是队列&#xff0c;而是类似一个堆一样的东西&#xff0c;我们先来试试它的接口函数是怎么个样子的。 需要包含的头文件是queue。 #include<iostream> #include<queue> using namespace std;…...

gitlab使用

个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…...

ppt技巧:如何将Word文档大纲中导入到幻灯片中?

在PowerPoint中&#xff0c;将Word文档的大纲导入到新的幻灯片是一种非常实用的技巧。以下是详细的步骤&#xff1a; 首先&#xff0c;需要打开PowerPoint软件并打开原始的幻灯片文件。 在PowerPoint的顶部【开始】菜单栏中&#xff0c;找到并点击“新建幻灯片”按钮&#xff0…...

0.开篇:SSM+Spring Boot导学

1. 为什么要使用框架 Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 几乎当下所有企业级JavaEE开发都离不开SSM&#xff08;Spring SpringMVC MyBatis&#xff09;Spring B…...

7、configMap

1、configMap是什么 类似与pod的配置中心&#xff0c;不会因为pod的创建销毁&#xff0c;相关配置发生改变 pod定义硬编码意味着需要有效区分⽣产环境与开发过程中的pod 定义。为了能在多个环境下复⽤pod的定义&#xff0c;需要将配置从pod定义描 述中解耦出来。 2、向容器中…...

【Java面试题】JVM(26道)

文章目录 JVM面试题基础1.什么是JVM&#xff1f;2.JVM的组织架构&#xff1f; 内存管理3.JVM的内存区域是什么&#xff1f;3.1堆3.2方法区3.3程序计数器3.4Java虚拟机栈3.5本地方法栈 4.堆和栈的区别是什么&#xff1f;5.JDK1.6、1.7、1.8内存区域的变化&#xff1f;6.内存泄露…...

(十三)强缓存和协商缓存的区别

一、浏览器的缓存策略 浏览器的缓存策略是指浏览器在加载页面时如何使用和管理缓存机制。可以提高网页加载速度&#xff0c;减轻服务器负载&#xff0c;并提供更好的用户体验。常用的缓存策略有两种&#xff1a;一种是发送请求&#xff08;协商缓存&#xff09;&#xff0c;一…...

如何创建Windows下google Chrome便携版?

创建google Chrome便携版教程 准备工作&#xff1a; 1&#xff0c;下载GoogleChromePortable启动器 2&#xff0c;下载谷歌浏览器 3&#xff0c;下载7-ZIP 解压提取器 用7zip解压GoogleChromePortable&#xff0c;得到GoogleChromePortable.exe启动器 解压谷歌浏览器 用7…...

rabbitmq安装rabbitmq-delayed-message-exchange插件

下载地址&#xff1a;Community Plugins | RabbitMQ 上传到rabbitmq安装目录的/plugins目录下 我的是/usr/lcoal/rabbitmq/plugins/ 直接安装 [rootk8s-node1 rabbitmq]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange [rootk8s-node1 rabbitmq]# rabbitmq-pl…...

B02、分析GC日志-6.3

1、相关GC日志参数 -verbose:gc 输出gc日志信息&#xff0c;默认输出到标准输出-XX:PrintGC 输出GC日志。类似&#xff1a;-verbose:gc-XX:PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志&#xff0c; 并在进程退出时输出当前内存各区域分配情况-XX:PrintGCTimeStamp…...

校园网站cms/网络营销推广方案范文

先看效果图 首先安装一下插件 yarn add react-transition-group把你需要有动画效果的页面用CSSTransition包裹起来 import { CSSTransition } from react-transition-group; import { RouteComponentProps } from react-router-dom;const Album: FC<RouteComponentProps&…...

wordpress 登陆白屏/全网关键词搜索工具

目录 Arbitrum Arbitrum One Arbitrum Nitro Arbitrum Nova Nova VS One Arbitrum Arbitrum 是 Offchain Labs 推出的一款 Layer2 扩容方案,通过采用多轮交互型设计的 Optimistic Rollup 方案,以实现对以太坊网络的扩容目标。 Arbitrum 基于 Optimistic Rollup 打造&…...

wordpress纯代码/网络营销与电子商务的区别

审核转换允许对数据流添加审核审核数据&#xff0c;以往使用HIPPA和Sarbanes-Oxley (SOX)时&#xff0c;必须跟踪谁在什么时插入数据&#xff0c;审核转换可以实现这种功能。例如要跟踪那一个task向表里插入数据&#xff0c;可以在审核转换中添加相应的列。在Output Column Nam…...

php 快速网站开发/怎样推广自己的产品

curator delete indices --index .marvel- --older-than 3 --time-unit days --timestring %Y.%m.%d3 /data0/wwwroot/elasticsearch-1.4.1/data/elasticsearch/nodes/0/indices转载于:https://blog.51cto.com/201438gz/1754170...

做请柬的网站/如何推广自己的产品

构建Linux下的Resin Apache jsp 参考&#xff1a;http://blog.chinaunix.net/uid-29140694-id-4018236.html 如果你的网站是建立在apache下现在又想使用jsp,怎么办呢&#xff1f;你可以通过一些支持apache的jsp引擎(如resin,tomcat,jser等)来实现。这里介绍怎么配置apacheres…...

武汉站哪家设计公司/推广普通话活动方案

MySQL 8.0.22下载及安装&#xff0c;供大家参考&#xff0c;具体内容如下一. 下载mysql1.进入MySQL官网下载&#xff0c;或直接点击下载&#xff0c;如下图所示&#xff1a;2.点击"DOWNLOADS"3.选择 " MySQL Community(GPL) Downloads"4.选择 “MySQL Comm…...