37 深度学习(一):查看自己显卡的指令|张量|验证集|分类问题|回归问题
文章目录
- 查看自己显卡的指令
- 框架选什么
- 张量的阶数
- 验证集存在的意义
- 分类问题
- 一般的全连接的代码格式(板子)
- 上面训练的详解
- 一些省略
- 梯度消失和梯度爆炸
- Dropout
- 回归问题
- 一般回归的全连接的板子
- batch-size
- 超参数搜索策略
此系列的深度学习主要是理论性的介绍,具体的实践,到时候可以参考我的另一篇专栏,此系列就是我个人向的学习笔记,此时对于深度学习的理解还是不够深刻,勿怪。
查看自己显卡的指令
在jupyter当中:
!nvidia-smi
linux下:
nvidia-smi
windows:
直接我的电脑 管理,直接看,或者电脑本身就知道了。
框架选什么
对于现在也就是2023/10/23日来说(叠加),框架的选择主要也就只有两种选择方法:
- tensorflow
- pytorch
其他的框架相对于这两款都不温不火,但二者非要我来说:
学tensorflow只会让你变成tf男孩,pytorch才是天(bushi),tensorflow适合开发,pytorch适合科研,但个人建议还是选择pytorch吧,tensorflow太答辩了,特别是1.0 与 2.0的问题,版本甚至不向前兼容啥的。也能理解,但就造成了之前的代码不可使用。
此篇文章为了讲解相关的原理,暂时使用tensorflow的2.8版本进行介绍,之后会再出一版pytorch放在一个新的专栏当中的。
张量的阶数
- 向量数据:2D张量,形状为(samples, features)。
- 时间序列数据或序列数据:3D张量,形状为(samples, timesteps, features)。
- 图像:4D张量,形状为(samples, height,width, channels)或(samples, channels,height,width)。
- 视频:5D张量,形状为(samples,frames, height,width, channels)或(samples,frames, channels, height, width)
验证集存在的意义
评估模型的重点是将数据划分为三个集合:训练集、验证集和测试集。在训练数据上训练模型,在验证数据上评估模型。一旦找到了最佳参数,就在测试数据上最后测试一次。
你可能会问,为什么不是两个集合:一个训练集和一个测试集?在训练集上训练模型,然后在测试集上评估模型。这样简单得多!原因在于开发模型时总是需要调节模型配置,比如选择层数或每层大小[这叫作模型的超参数(hyperparameter),以便与模型参数(即权重)区分开]。这个调节过程需要使用模型在验证数据上的性能作为反馈信号。这个调节过程本质上就是一种学习:在某个参数空间中寻找良好的模型配置。因此,如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。
造成这一现象的关键在于信息泄露(information leak)。每次基于模型在验证集上的性能来调节模型超参数,都会有一些关于验证数据的信息泄露到模型中。如果对每个参数只调节一次,那么泄露的信息很少,验证集仍然可以可靠地评估模型。但如果你多次重复这一过程(运行一次实验,在验证集上评估,然后据此修改模型),那么将会有越来越多的关于验证集的信息泄露到模型中。
最后,你得到的模型在验证集上的性能非常好(人为造成的),因为这正是你优化的目的。你关心的是模型在全新数据上的性能,而不是在验证数据上的性能,因此你需要使用一个完全不同的、前所未见的数据集来评估模型,它就是测试集。你的模型一定不能读取与测试集有关的任何信息,既使间接读取也不行。如果基于测试集性能来调节模型,那么对泛化能力的衡量是不准确的。
将数据划分为训练集、验证集和测试集可能看起来很简单,但如果可用数据很少,还有几种高级方法可以派上用场。我们先来介绍三种经典的评估方法:简单的留出验证、K 折验证,以及带有打乱数据的重复 K 折验证。
关于信息泄露比较白话的说法就是,我们实际上自己在调整超参数的时候,我们看到了相对应的正确率,然后我们会根据这个正确率或者损失大小,去手动再进行调整超参数,这样会造成什么情况呢?当我们的数据只有数据集和测试集的时候,我们人为调整的过程,实际上等效于将我们的数据训练出来的东西,去接近测试集,但是我们在生活中的产品的使用中,并不存在这种情况,我们生活中,在测试的时候,都是只测试一次的,这就造成了认为产生的信息泄露。
也就是说验证集的作用就是:相对于只有测试集的,避免人工调参的信息泄露。
分类问题
一般的全连接的代码格式(板子)
pytorch的板子之后再整理。
tensorflow:
import numpy as np
import pandas as pd
from tensorflow import keras
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
import os
import matplotlib.pyplot as plt# 数据准备
#----------------------------------------------------------------------
# fashion_mnist图像分类数据集 这个数据集就是一个比较出名的分类的数据集,用于将一个图片分类成10个时尚品的类别
fashion_mnist = keras.datasets.fashion_mnist(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()
x_valid, x_train = x_train_all[:5000], x_train_all[5000:]
y_valid, y_train = y_train_all[:5000], y_train_all[5000:]# 得到的是np 也是把数据集分成三个部分,数据集验证集和测试集。
print(x_valid.shape, y_valid.shape)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
#----------------------------------------------------------------------# 特征工程
#----------------------------------------------------------------------
# 标准化
scaler = StandardScaler()
# x_train: [None, 28, 28] -> [None, 784]
x_train_scaled = scaler.fit_transform(x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
x_valid_scaled = scaler.transform(x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
x_test_scaled = scaler.transform(x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
#----------------------------------------------------------------------# 构造神经网络dnn 这边也可以使用类来实现不用用这个Sequential进行实现,这边只是给个例子,后面回归会使用类
#----------------------------------------------------------------------
model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28, 28]))
for _ in range(20):model.add(keras.layers.Dense(100, activation="selu"))# 批处理正则化# model.add(keras.layers.BatchNormalization())
model.add(keras.layers.AlphaDropout(rate=0.2))
# AlphaDropout相对于普通Dropout优势: 1. 均值和方差不变 2. 归一化性质也不变
# model.add(keras.layers.Dropout(rate=0.5))# 分类网络的最后一层使用softmax 进行概率统一化
model.add(keras.layers.Dense(10, activation="softmax"))
#----------------------------------------------------------------------# 定义最后的目标(损失)函数 优化器(也就是优化的方向,这边sgd就是随机下降梯度算法,传入的就是默认的学习率) metric算子就是需要计算什么,后面打印用
#----------------------------------------------------------------------
# sparse_categorical_crossentropy和categorical_crossentropy的区别就是前者用的是整数后者用的是one-hot编码
#
model.compile(loss="sparse_categorical_crossentropy",optimizer = keras.optimizers.SGD(0.001),metrics = ["accuracy"])
#----------------------------------------------------------------------# callbacks和保存模型
#----------------------------------------------------------------------
logdir = './dnn-selu-dropout-callbacks'
if not os.path.exists(logdir):os.mkdir(logdir)
output_model_file = os.path.join(logdir,"fashion_mnist_model.h5")# 第二个参数就是保存的位置和只保存最佳的参数
# 第三个就是当性能(默认是val_loss)连续五次的变化(epoch)不超过1e-3,就直接停止
callbacks = [keras.callbacks.TensorBoard(logdir),keras.callbacks.ModelCheckpoint(output_model_file,save_best_only = True),keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3),
]
#----------------------------------------------------------------------# 开始训练
#----------------------------------------------------------------------
history = model.fit(x_train_scaled,y_train,epochs=10,validation_data=(x_valid_scaled, y_valid),callbacks = callbacks)
# 训练的时候会自动打印那些正确率啥的,还有就是你前面加的算子
#----------------------------------------------------------------------# 画图
#----------------------------------------------------------------------
def plot_learning_curves(history):pd.DataFrame(history.history).plot(figsize=(8, 5))plt.grid(True)plt.gca().set_ylim(0, 1)plt.show()plot_learning_curves(history)
#----------------------------------------------------------------------# 评估模型
#----------------------------------------------------------------------
model.evaluate(x_test_scaled, y_test, verbose=0)
#----------------------------------------------------------------------
输出:
(5000, 28, 28) (5000,)
(55000, 28, 28) (55000,)
(10000, 28, 28) (10000,)
Epoch 1/10
1719/1719 [==============================] - 16s 8ms/step - loss: 0.8931 - accuracy: 0.6938 - val_loss: 0.5760 - val_accuracy: 0.8026
Epoch 2/1017/1719 [..............................] - ETA: 11s - loss: 0.6089 - accuracy: 0.7739/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py:3000: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.saving_api.save_model(
1719/1719 [==============================] - 16s 9ms/step - loss: 0.5796 - accuracy: 0.7998 - val_loss: 0.5197 - val_accuracy: 0.8270
Epoch 3/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.5043 - accuracy: 0.8278 - val_loss: 0.4659 - val_accuracy: 0.8504
Epoch 4/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.4571 - accuracy: 0.8411 - val_loss: 0.4407 - val_accuracy: 0.8544
Epoch 5/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.4280 - accuracy: 0.8504 - val_loss: 0.4318 - val_accuracy: 0.8618
Epoch 6/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.4056 - accuracy: 0.8566 - val_loss: 0.4215 - val_accuracy: 0.8660
Epoch 7/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.3873 - accuracy: 0.8621 - val_loss: 0.4584 - val_accuracy: 0.8532
Epoch 8/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.3694 - accuracy: 0.8692 - val_loss: 0.4269 - val_accuracy: 0.8716
Epoch 9/10
1719/1719 [==============================] - 13s 7ms/step - loss: 0.3582 - accuracy: 0.8727 - val_loss: 0.4026 - val_accuracy: 0.8738
Epoch 10/10
1719/1719 [==============================] - 13s 8ms/step - loss: 0.3469 - accuracy: 0.8766 - val_loss: 0.4028 - val_accuracy: 0.8712
图片见下
[0.4599243104457855, 0.8568000197410583]
图片:
上面训练的详解
- loss:训练集损失值
- accuracy:训练集准确率
- val_loss:测试集损失值
- val_accruacy:测试集准确率
以下 5 种情况可供参考:
- train loss 不断下降,test loss 不断下降,说明网络仍在学习;(最好的)
- train loss 不断下降,test loss 趋于不变,说明网络过拟合;(max pool 或者正则化)
- train loss 趋于不变,test loss 不断下降,说明数据集 100%有问题;(检查 dataset)
- train loss 趋于不变,test loss 趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;(减少学习率)
- train loss 不断上升,test loss 不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。
一些省略
关于前向传播, 反向传播,很早之前就已经写过一版了,这边也不赘述。
梯度消失和梯度爆炸
梯度消失和梯度爆炸的原因都是一致的,我们在链式求导法则当中是一系列连乘的效果,这种值在没有进行约束的情况下,会造成什么效果呢? 要么就是他会让我们的梯度几乎不变化,要么就是他会让我们的梯度变化巨大,这就分别就是梯度消失和梯度爆炸,(w-学习率*导数),(导数=链式求导)。
那由于这种原因,我们的解决方法就是把每一层的神经网络的输出,加上一层bn(批归一化),就是把那些数值非线性的放到对应的位置上,这个确实可以解决,但是每层都加,会大大减缓这种问题的发生
相同的,我们也可以从别的地方下手,比如我们可以从激活函数下手,我们发现我们在每一层上加上了sigmoid函数之后,会把原本的数据映射到0-1之间,求导之后就很容易会造成梯度消失,转而我们可以替换成relu或者selu这种比较优良的算法。
Dropout
上面的代码中我们采用的是AlphaDropout,这个和普通的Dropout有什么区别吗?正常的是全随机的去除某几个点,或者说是将其w变为0,进行训练,而AlphaDropout做到的是伪随机,是在不改变分布的情况下的伪随机。(参数是去掉多少百分比的点,一般10%-20%之间吧,个人感觉)。
回归问题
实际上我们仅从肉眼看分类问题和回归问题,我们并不能看出二者的差别是什么,可能唯一的区别就是对于回归问题,我们需要改变其损失函数,最后不需要加上softmax层,将参数概率化这一步吧。
这边举一篇比较经典的例子:Wide&Deep论文,也可以当作回归的板子来使用
一般回归的全连接的板子
import numpy as np
import pandas as pd
from tensorflow import keras
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
import os
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split# 准备数据集 验证集 测试集
# -----------------------------------------------------------------------------
housing = fetch_california_housing()
print(housing.data.shape)
print(housing.target.shape)
x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data, housing.target, random_state = 7)
x_train, x_valid, y_train, y_valid = train_test_split(x_train_all, y_train_all, random_state = 11)
# -----------------------------------------------------------------------------# 特征工程
# -----------------------------------------------------------------------------
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_valid_scaled = scaler.transform(x_valid)
x_test_scaled = scaler.transform(x_test)
# -----------------------------------------------------------------------------# 用类的方式构建模型
# -----------------------------------------------------------------------------
class WideDeepModel(keras.models.Model):def __init__(self):super().__init__()"""定义模型的层次"""self.hidden1_layer = keras.layers.Dense(30, activation='relu')self.hidden2_layer = keras.layers.Dense(30, activation='relu')self.output_layer1 = keras.layers.Dense(1)def call(self, input):"""完成模型的正向计算"""input1,input2 = inputhidden1 = self.hidden1_layer(input1)hidden2 = self.hidden2_layer(hidden1)concat = keras.layers.concatenate([input2, hidden2])output1 = self.output_layer1(concat)output2 = input1return [output2,output1]# -----------------------------------------------------------------------------
model = WideDeepModel()
model.build(input_shape=[(None, 5),(None,6)])print(model.summary())
model.compile(loss=["mean_squared_error","mean_squared_error"],optimizer = keras.optimizers.SGD(0.001))
callbacks = [keras.callbacks.EarlyStopping(patience=5, min_delta=1e-2)]history = model.fit([x_train_scaled[:,:5],x_train_scaled[:,2:]], [y_train,y_train],validation_data = ([x_valid_scaled[:,:5],x_valid_scaled[:,2:]], [y_valid,y_valid]),epochs = 10,callbacks = callbacks)def plot_learning_curves(history):pd.DataFrame(history.history).plot(figsize=(8, 5))plt.grid(True)plt.gca().set_ylim(0, 2)plt.show()
plot_learning_curves(history)model.evaluate([x_test_scaled[:,:5],x_test_scaled[:,2:]], [y_test,y_test], verbose=0)
输出:
(20640, 8)
(20640,)
Model: "wide_deep_model_3"
_________________________________________________________________Layer (type) Output Shape Param #
=================================================================dense_9 (Dense) multiple 180 dense_10 (Dense) multiple 930 dense_11 (Dense) multiple 37 =================================================================
Total params: 1147 (4.48 KB)
Trainable params: 1147 (4.48 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
None
Epoch 1/10
363/363 [==============================] - 5s 11ms/step - loss: 7.7861 - output_1_loss: 6.1213 - output_2_loss: 1.6648 - val_loss: 7.4389 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.9103
Epoch 2/10
363/363 [==============================] - 2s 5ms/step - loss: 6.9222 - output_1_loss: 6.1213 - output_2_loss: 0.8009 - val_loss: 7.3594 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.8308
Epoch 3/10
363/363 [==============================] - 2s 4ms/step - loss: 6.8590 - output_1_loss: 6.1213 - output_2_loss: 0.7377 - val_loss: 7.3015 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.7728
Epoch 4/10
363/363 [==============================] - 2s 4ms/step - loss: 6.8141 - output_1_loss: 6.1213 - output_2_loss: 0.6928 - val_loss: 7.2605 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.7319
Epoch 5/10
363/363 [==============================] - 2s 4ms/step - loss: 6.7801 - output_1_loss: 6.1213 - output_2_loss: 0.6588 - val_loss: 7.2233 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.6947
Epoch 6/10
363/363 [==============================] - 2s 5ms/step - loss: 6.7522 - output_1_loss: 6.1213 - output_2_loss: 0.6310 - val_loss: 7.1959 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.6673
Epoch 7/10
363/363 [==============================] - 2s 6ms/step - loss: 6.7302 - output_1_loss: 6.1213 - output_2_loss: 0.6090 - val_loss: 7.1744 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.6458
Epoch 8/10
363/363 [==============================] - 2s 6ms/step - loss: 6.7118 - output_1_loss: 6.1213 - output_2_loss: 0.5905 - val_loss: 7.1550 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.6264
Epoch 9/10
363/363 [==============================] - 2s 4ms/step - loss: 6.6962 - output_1_loss: 6.1213 - output_2_loss: 0.5750 - val_loss: 7.1474 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.6188
Epoch 10/10
363/363 [==============================] - 2s 5ms/step - loss: 6.6839 - output_1_loss: 6.1213 - output_2_loss: 0.5626 - val_loss: 7.1270 - val_output_1_loss: 6.5286 - val_output_2_loss: 0.5983
图片
[6.655601978302002, 6.074487209320068, 0.5811142325401306]
batch-size
这个概念主要要和epoch尽心区分开,前者是总的训练多少次,batch-size是一次训练加载多少数据,举个例子假设数据共有100条,我把batch-size设置为10,epoch设置为10,那么我的训练过程就是10(batch-size)条,10条取数据去训练模型,训练了10轮之后,一个batch完了,就开始下一个epoch,这样讲解比较清楚。
超参数搜索策略
- 网格搜索
- 随机搜索
- 遗传算法搜索
- 启发式搜索
这边只是举一些例子,而网格搜索可以使用sklearn当中的GridSearchCV进行使用,并且搭配上tf.keras.wrappers.scikit_learn.KerasRegressor进行使用,这边暂时不进行介绍
在最新的tensorflow当中已经取消掉了这个接口,现在已经移到别的地方进行维护:
pip install scikeras[tensorflow] # gpu compute platform
pip install scikeras[tensorflow-cpu] # cpu
原本的库变成了:
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
变成了
from scikeras.wrappers import KerasClassifier
然后下面就是给出相关的网格的板子:
import numpy as np
import pandas as pd
from tensorflow import keras
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from scikeras.wrappers import KerasRegressor
from sklearn.model_selection import GridSearchCV# 准备数据集 验证集 测试集
# -----------------------------------------------------------------------------
housing = fetch_california_housing()
x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data, housing.target, random_state = 7)
x_train, x_valid, y_train, y_valid = train_test_split(x_train_all, y_train_all, random_state = 11)
print(x_train.shape, y_train.shape)
print(x_valid.shape, y_valid.shape)
print(x_test.shape, y_test.shape)
# -----------------------------------------------------------------------------# 特征工程
# -----------------------------------------------------------------------------
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)
x_valid_scaled = scaler.transform(x_valid)
x_test_scaled = scaler.transform(x_test)
# -----------------------------------------------------------------------------# RandomizedSearchCV
# 1. 因为是sklearn的接口,转化为sklearn的model
# 2. 定义参数集合
# 3. 搜索参数# 构造模型的回调函数
# -----------------------------------------------------------------------------
def build_model(hidden_layers = 1,layer_size = 30,learning_rate = 3e-3):model = keras.models.Sequential()# 因为不知道第一个输入的shape是多大的,因此我们需要单独从for循环里拿出来,for循环里的是输出再次作为输入,这边注意的是input_shape。model.add(keras.layers.Dense(layer_size,activation='relu',input_shape=x_train.shape[1:]))for _ in range(hidden_layers - 1):model.add(keras.layers.Dense(layer_size,activation = 'relu'))model.add(keras.layers.Dense(1))optimizer = keras.optimizers.SGD(learning_rate)model.compile(loss = 'mse', optimizer = optimizer)return model
# -----------------------------------------------------------------------------# KerasRegressor返回一个sk的model,build_fn是一个回调函数 !重点! 重点参数需要加在后面,这是新的版本下需要注意的,框架的封装性不是很好
# -----------------------------------------------------------------------------
sklearn_model = KerasRegressor(model = build_model,hidden_layers = 1,layer_size = 30,learning_rate = 3e-3)
# -----------------------------------------------------------------------------callbacks = [keras.callbacks.EarlyStopping(patience=5, min_delta=1e-2)]# 设置网格训练的参数,注意和回调函数相对应
# -----------------------------------------------------------------------------
param_distribution = {'hidden_layers':[1,2,3,4,5],'layer_size': [5,10,15,20,25,30],'learning_rate': [1e-4,2e-3,1e-3,2e-2,1e-5]
}
grid_search_cv =GridSearchCV(estimator=sklearn_model,param_grid=param_distribution)grid_search_cv.fit(x_train_scaled, y_train, epochs = 5, validation_data = (x_valid_scaled, y_valid), callbacks = callbacks)
# -----------------------------------------------------------------------------# 选择最好的模型 以及相关最好的参数
model = grid_search_cv.best_estimator_.model_
model.evaluate(x_test_scaled, y_test)
print(grid_search_cv.best_params_)
print(grid_search_cv.best_score_)
print(grid_search_cv.best_estimator_)
如果是使用随机搜索的话,这边只给出不一样的地方:
random_search_cv = RandomizedSearchCV(sklearn_model,param_distribution,n_iter = 1,#多少个参数集合n_jobs = -1)
random_search_cv.fit(x_train_scaled, y_train, epochs = 100,validation_data = (x_valid_scaled, y_valid),callbacks = callbacks)
最后给出最后的网格搜索的输出,只给出最后的,不然全部打印得有好几千字了吧。hh
{'hidden_layers': 2, 'layer_size': 15, 'learning_rate': 0.002}
0.5949557467666313
KerasRegressor(model=<function build_model at 0x7f9ffd542a70>build_fn=Nonewarm_start=Falserandom_state=Noneoptimizer=rmsproploss=Nonemetrics=Nonebatch_size=Nonevalidation_batch_size=Noneverbose=1callbacks=Nonevalidation_split=0.0shuffle=Truerun_eagerly=Falseepochs=1hidden_layers=2layer_size=15learning_rate=0.002
)
相关文章:

37 深度学习(一):查看自己显卡的指令|张量|验证集|分类问题|回归问题
文章目录 查看自己显卡的指令框架选什么张量的阶数验证集存在的意义分类问题一般的全连接的代码格式(板子)上面训练的详解一些省略梯度消失和梯度爆炸Dropout 回归问题一般回归的全连接的板子 batch-size超参数搜索策略 此系列的深度学习主要是理论性的介…...
用C语言解决三个整数比大小,x,y,z三个整数求最小整数,从键盘上输入3个不同的整数×,y,Z,请设计一个算法找出其中最小的数,并画出流程图。
用C语言解决三个整数比大小,x,y,z三个整数求最小整数,从键盘上输入3个不同的整数,y,Z,请设计一个算法找出其中最小的数,并画出流程图。 以下是一个用C语言解决三个整数比大小的示例代码: #include <stdio.h>int main() {i…...

操作系统进程调度算法的模拟实现(c语言版本)
前言:本文旨在分享如何使用c语言对操作系统中的部分进程调度算法进行模拟实现,以及算法描述的讲解,完整代码放在文章末尾,欢迎大家自行拷贝调用 目录 常见的调度算法 数据结构 先来先服务调度算法 算法模拟思路: …...
webbench压测工具
介绍 webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。 https://soft.lnmp.com/test/webbench/ 安装非常简单 tar zxvf webbench-1.5.tar.gz cd webbench-1.5 make && make install会在当前目录生成webbench可执…...

HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能
OpenSL ES 全称为 Open Sound Library for Embedded Systems,是一个嵌入式、跨平台、免费的音频处理库。为嵌入式移动多媒体设备上的应用开发者提供标准化、高性能、低延迟的 API。HarmonyOS 的 Native API 基于Khronos Group开发的OpenSL ES 1.0.1 API 规范实现&am…...
docker搭建个人镜像仓库
docker搭建个人镜像仓库 安装registry mkdir docker-registry cd docker-registry mkdir registry mkdr auth vim docker-compose.ymldocker-compose.yml的内容如下: version: 3 services:registry:image: registrycontainer_name: registryvolumes:- ./registry…...

Python机器学习17——Xgboost和Lightgbm结合分位数回归(机器学习与传统统计学结合)
最近XGboost支持分位数回归了,我看了一下,就做了个小的代码案例。毕竟学术市场上做这种新颖的机器学习和传统统计学结合的方法还是不多,算的上创新,找个好数据集可以发论文。 代码实现 导入包 import numpy as np import pandas…...
C#编程学习
1. **C#简介**: - C#是一种现代的、面向对象的编程语言,由Microsoft开发。 - 它是.NET框架的一部分,用于开发Windows应用程序、Web应用程序和服务等。 2. **开发环境**: - 你可以使用Visual Studio或Visual Studio Code…...
关于vue 父级不使用子级某模块 (插槽替换)
父级: <template><div><MoreSupplements code"Xmgk" message"补充内容越多,越精准"><template #r-btn>xxx</template></MoreSupplements></div> </template> <script> import MoreSupplements fr…...

睿趣科技:抖音小店在哪里选品
随着抖音平台的日益火爆,越来越多的商家选择在抖音小店开设自己的店铺。然而,对于许多新手来说,如何选品却成为了一个难题。那么,抖音小店应该在哪里选品呢? 首先,我们可以从抖音平台上的热门商品入手。通过观察抖音上…...
量变引起质变:安卓改多了,就是自己的OS
最近小米也发布了自己的OS,其他也有厂家跟进。这是自华为鸿蒙之后,大家都说自己开发OS。对此,也是有很多争论的。 有人说,这些东西不都是安卓套壳或者改名吗?怎么就变成了自己的OS?这种观点对不对呢&#x…...
IDEA 之 在不更改操作系统用户名的情况下更改 ${USER} 变量?
如何在不更改操作系统用户名的情况下更改 IntelliJ IDEA 中的 ${USER} 变量 IDEA -> Help -> Edit Custom VM 添加如下内容 -Duser.nameusername这样在文件或者函数注释的时候会读取这个配置,而不会读取电脑登录用户名...

基于JAVA的天猫商场系统设计与实现,springboot+jsp,MySQL数据库,前台用户+后台管理,完美运行,有一万五千字论文
目录 演示视频 基本介绍 论文目录 系统截图 演示视频 基本介绍 基于JAVA的天猫商场系统设计与实现,springbootjsp,MySQL数据库,前台用户后台管理,完美运行,有一万五千字论文。 本系统在HTML和CSS的基础上…...

Redis学习
缓存定义 缓存是一个告诉数据交换的存储器,使用它可以快速的访问和操作数据。 常见缓存使用 本地缓存的常见使用:Spring Cache、MyBatis的缓存等 我的session存储和redis都放到缓存里面的,所有程序不管部署多少份,访问的都是r…...

uni-app:实现picker下拉列表的默认值设置
效果 分析 1、在data中将index8的初始值设置为-1,表示未选择任何选项: index8: -1, //选择的下拉列表下标 2、在bindPickerChange8事件处理函数中添加条件判断。如果选择的值是-1,则将this.index8设置为"请输入",否则将…...

基于NB-iot技术实现财物跟踪的EA01-SG定位模块方案
NB-iot无线数传模块可做财物防盗窃器,让你的财物可定位跟踪! 随着社会的发展,公共资源及共享资源的蓬勃发展,对资产管理和资产追踪有了新的需求,如:某儿童玩具车在商场外面提供车辆乘坐游玩服务࿰…...

挑战吧,HarmonyOS应用开发工程师
一年一度属于工程师的专属节日1024,多重活动亮相啦~ 参与活动即有机会获得HUAWEI Freebuds 5i 耳机等精美礼品! 点击“阅读原文”查看更多活动详情!...

图论05-【无权无向】-图的广度优先BFS遍历-路径问题/检测环/二分图/最短路径问题
文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 联通分量5. 环检测5.1 思路5.2 主要代码 6. 二分图检测6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 判断相邻两点的颜色是否一致 7. 最短路径问题7.1 思路7.2 代码 1. 代码…...

uniapp:谷歌地图,实现地图展示,搜索功能,H5导航
页面展示 APP H5 谷歌地图功能记录,谷歌key申请相对复杂一些,主要需要一些国外的身份信息。 1、申请谷歌key 以下是申请谷歌地图 API 密钥的流程教程: 登录谷歌开发者控制台:打开浏览器,访问 Google Cloud Platform Console。 1、创建或选择项目:如果你还没有创建项目…...

关于腾讯云轻量应用服务器性能测评,看这一篇文章就够了
腾讯云轻量应用服务器性能如何?为什么便宜是不是性能不行?腾讯云百科txybk.com从轻量应用服务器的CPU型号、处理器主频、内存、公网带宽、月流量和系统盘多方面来详细测评轻量性能,轻量应用服务器性价比高,并不是性能不行…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...