嵌入原则:数据特征如何 融入 模型的 损失地形

嵌入原则:数据特征如何 融入 模型的 损失地形

第一节:嵌入原则的基本概念与公式解释

机器学习中的嵌入原则,就像 “雕刻师”“石块的纹理” 逐渐融入到 “雕塑的造型” 中。数据特征不再是独立的输入,而是被模型 “吸收”“内化”,最终体现在模型的 “损失地形” 上。

核心内容

【嵌入原则的核心思想是,数据特征不是 “外挂” 在模型上的,而是模型 “自身结构” 的一部分。模型通过学习,将数据特征 “编码”“低维向量”,这些向量 “镶嵌” 在模型的参数空间中,共同塑造了模型的 “损失地形”。这个 “损失地形”“坡度”“谷底”,直接决定了模型的 “学习方向”“最终性能”。】

嵌入函数的基本公式

嵌入过程可以用一个嵌入函数 E E E 来表示,它将原始数据特征 x x x 映射到一个低维的嵌入向量 e e e

e = E ( x ; W e ) e = E(x; W_e) e=E(x;We)

变量解释

  • e e e:嵌入向量,低维空间中数据特征的表示。
  • E E E:嵌入函数,通常是一个神经网络层(如线性层、全连接层)。
  • x x x:原始数据特征,模型的输入。
  • W e W_e We:嵌入函数的参数,例如嵌入层的权重矩阵。

具体实例与推演【【通俗讲解,打比方来讲解!】】

以文本情感分类为例,理解嵌入原则的应用。

  • 步骤

    1. 原始文本输入:例如句子 “这部电影真棒!”
    2. 特征提取:将文本转换为词向量,例如使用 Word2Vec 或 GloVe 预训练的词向量。假设 “真棒” 这个词的词向量为 v awesome v_\text{awesome} vawesome
    3. 嵌入层:模型包含一个嵌入层 E E E,将词向量 v awesome v_\text{awesome} vawesome 作为输入,通过学习得到一个新的嵌入向量 e awesome = E ( v awesome ; W e ) e_\text{awesome} = E(v_\text{awesome}; W_e) eawesome=E(vawesome;We)
    4. 损失函数:情感分类任务的损失函数(如交叉熵损失)会根据模型的预测情感和真实情感计算损失值。
    5. 梯度下降:梯度下降算法会根据损失值,调整模型参数(包括嵌入层参数 W e W_e We),使得模型能够更好地将 “真棒” 这类词语的嵌入向量与 “积极情感” 关联起来。
  • 应用公式

    假设嵌入函数 E E E 是一个简单的线性变换: E ( x ; W e ) = W e x E(x; W_e) = W_e x E(x;We)=Wex。如果词向量 v awesome = [ 0.2 , 0.5 , − 0.1 ] v_\text{awesome} = [0.2, 0.5, -0.1] vawesome=[0.2,0.5,0.1],嵌入矩阵 W e W_e We 在训练过程中不断更新,使得 e awesome = W e v awesome e_\text{awesome} = W_e v_\text{awesome} eawesome=Wevawesome 能够更好地帮助模型进行情感分类。

第二节:损失景观与特征融入

损失函数与损失景观

损失函数 L ( y ^ , y ) L(\hat{y}, y) L(y^,y) 度量了模型预测 y ^ \hat{y} y^ 与真实标签 y y y 之间的差异。损失景观可以理解为模型参数空间上的一个 “地形图”,高度表示损失值,“山峰” 代表损失值高,“山谷” 代表损失值低。

L ( θ ) = 1 N ∑ i = 1 N L ( f ( x i ; θ ) , y i ) \mathcal{L}(\theta) = \frac{1}{N} \sum_{i=1}^{N} L(f(x_i; \theta), y_i) L(θ)=N1i=1NL(f(xi;θ),yi)

变量解释

  • L ( θ ) \mathcal{L}(\theta) L(θ):损失景观函数,表示模型参数 θ \theta θ 对应的平均损失值。
  • θ \theta θ:模型参数集合,包括嵌入层参数 W e W_e We 和其他模型层的参数。
  • N N N:训练样本数量。
  • L L L:单个样本的损失函数。
  • f ( x i ; θ ) f(x_i; \theta) f(xi;θ):模型函数,输入 x i x_i xi,参数为 θ \theta θ,输出预测值。
  • y i y_i yi:第 i i i 个样本的真实标签。
特征融入损失景观的过程

嵌入原则的核心在于,数据特征通过嵌入函数 E E E 参与到损失函数的计算中,并最终 “塑造” 了损失景观。

  1. 特征影响预测:嵌入向量 e = E ( x ; W e ) e = E(x; W_e) e=E(x;We) 作为模型的输入,直接影响模型的预测结果 y ^ = f ′ ( e ; θ ′ ) \hat{y} = f'(e; \theta') y^=f(e;θ),其中 f ′ f' f 是模型主体部分, θ ′ \theta' θ 是模型主体部分的参数。
  2. 预测影响损失:预测结果 y ^ \hat{y} y^ 与真实标签 y y y 共同决定了损失值 L ( y ^ , y ) L(\hat{y}, y) L(y^,y)
  3. 损失驱动学习:梯度下降算法根据损失值 L ( θ ) \mathcal{L}(\theta) L(θ) 的梯度,更新模型参数 θ = [ W e , θ ′ ] \theta = [W_e, \theta'] θ=[We,θ],包括嵌入层参数 W e W_e We
  4. 特征融入景观:随着训练的进行,嵌入层参数 W e W_e We 不断调整,使得嵌入向量 e e e 能够更好地反映数据特征 x x x,从而 “优化” 损失景观,使其 “山谷” 更深更广,“山峰” 更矮更平缓。

第三节:公式探索与推演运算

损失函数的选择与影响

不同的损失函数会塑造不同的损失景观,从而影响特征融入的方式和模型的学习效果。常见的损失函数包括:

  1. 均方误差损失 (MSE):常用于回归任务。

    L MSE ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L_\text{MSE}(\hat{y}, y) = \frac{1}{2} (\hat{y} - y)^2 LMSE(y^,y)=21(y^y)2

    变量解释

    • L MSE L_\text{MSE} LMSE:均方误差损失值。
    • y ^ \hat{y} y^:模型预测值。
    • y y y:真实标签值。
  2. 交叉熵损失 (Cross-Entropy):常用于分类任务。

    L CE ( y ^ , y ) = − ∑ c = 1 C y c log ⁡ ( y ^ c ) L_\text{CE}(\hat{y}, y) = - \sum_{c=1}^{C} y_c \log(\hat{y}_c) LCE(y^,y)=c=1Cyclog(y^c)

    变量解释

    • L CE L_\text{CE} LCE:交叉熵损失值。
    • C C C:类别数量。
    • y c y_c yc:真实标签的 one-hot 编码,类别 c c c 为 1,其余为 0。
    • y ^ c \hat{y}_c y^c:模型预测的样本属于类别 c c c 的概率。
  3. 对比损失 (Contrastive Loss):常用于学习相似性度量和嵌入表示。

    L Contrastive ( e i , e j , l i j ) = l i j d ( e i , e j ) 2 + ( 1 − l i j ) max ⁡ ( 0 , m − d ( e i , e j ) ) 2 L_\text{Contrastive}(e_i, e_j, l_{ij}) = l_{ij} d(e_i, e_j)^2 + (1 - l_{ij}) \max(0, m - d(e_i, e_j))^2 LContrastive(ei,ej,lij)=lijd(ei,ej)2+(1lij)max(0,md(ei,ej))2

    变量解释

    • L Contrastive L_\text{Contrastive} LContrastive:对比损失值。
    • e i , e j e_i, e_j ei,ej:样本 i i i j j j 的嵌入向量。
    • l i j l_{ij} lij:标签,若样本 i i i j j j 相似则为 1,不相似则为 0。
    • d ( e i , e j ) d(e_i, e_j) d(ei,ej):嵌入向量 e i e_i ei e j e_j ej 之间的距离度量(如欧氏距离)。
    • m m m:边界值 (margin),用于控制不相似样本之间的最小距离。
梯度下降与损失景观优化

梯度下降算法是优化损失景观的关键。其迭代更新公式为:

θ t + 1 = θ t − η ∇ L ( θ t ) \theta_{t+1} = \theta_t - \eta \nabla \mathcal{L}(\theta_t) θt+1=θtηL(θt)

变量解释

  • θ t + 1 \theta_{t+1} θt+1:第 t + 1 t+1 t+1 次迭代的模型参数。
  • θ t \theta_t θt:第 t t t 次迭代的模型参数。
  • η \eta η:学习率,控制参数更新的步长。
  • ∇ L ( θ t ) \nabla \mathcal{L}(\theta_t) L(θt):损失景观函数在 θ t \theta_t θt 处的梯度,指示损失值下降最快的方向。

梯度下降算法就像 “登山者”“损失地形” 上寻找 “最低点”。通过不断迭代,模型参数 θ \theta θ 沿着梯度方向移动,最终到达损失景观的 “谷底”,此时模型达到最优状态。

公式推导

对比损失公式的理解

对比损失公式旨在学习到一种嵌入表示,使得相似的样本在嵌入空间中距离较近,不相似的样本距离较远。

  • 相似样本 ( l i j = 1 l_{ij} = 1 lij=1):损失函数变为 L Contrastive = d ( e i , e j ) 2 L_\text{Contrastive} = d(e_i, e_j)^2 LContrastive=d(ei,ej)2,目标是缩小相似样本的嵌入向量距离 d ( e i , e j ) d(e_i, e_j) d(ei,ej)
  • 不相似样本 ( l i j = 0 l_{ij} = 0 lij=0):损失函数变为 L Contrastive = max ⁡ ( 0 , m − d ( e i , e j ) ) 2 L_\text{Contrastive} = \max(0, m - d(e_i, e_j))^2 LContrastive=max(0,md(ei,ej))2,目标是增大不相似样本的嵌入向量距离 d ( e i , e j ) d(e_i, e_j) d(ei,ej),至少要大于边界值 m m m

通过这种方式,对比损失能够有效地引导模型学习到区分相似性和不相似性的嵌入表示,从而将数据特征融入到损失景观中。

第四节:相似公式比对

公式/概念共同点不同点
e = E ( x ; W e ) e = E(x; W_e) e=E(x;We) (嵌入函数)将原始特征映射到低维空间具体实现方式不同,可以是线性层、非线性层等
L ( θ ) = 1 N ∑ i = 1 N L ( f ( x i ; θ ) , y i ) \mathcal{L}(\theta) = \frac{1}{N} \sum_{i=1}^{N} L(f(x_i; \theta), y_i) L(θ)=N1i=1NL(f(xi;θ),yi) (损失景观)度量模型性能,指导模型学习具体损失函数 L L L 不同,适用于不同任务
L MSE ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L_\text{MSE}(\hat{y}, y) = \frac{1}{2} (\hat{y} - y)^2 LMSE(y^,y)=21(y^y)2 (MSE 损失)回归任务常用损失函数对预测值和真实值之差的平方敏感
L CE ( y ^ , y ) = − ∑ c = 1 C y c log ⁡ ( y ^ c ) L_\text{CE}(\hat{y}, y) = - \sum_{c=1}^{C} y_c \log(\hat{y}_c) LCE(y^,y)=c=1Cyclog(y^c) (交叉熵损失)分类任务常用损失函数度量预测概率分布与真实分布的差异
L Contrastive ( e i , e j , l i j ) L_\text{Contrastive}(e_i, e_j, l_{ij}) LContrastive(ei,ej,lij) (对比损失)学习相似性度量和嵌入表示针对样本对,鼓励相似样本嵌入靠近,不相似样本嵌入远离

第五节:核心代码与可视化

以下 Python 代码演示了如何使用 PyTorch 构建一个简单的模型,包含一个嵌入层,并使用 MNIST 数据集进行训练,可视化嵌入向量的分布,以及损失景观的简化表示。

# This code performs the following functions:
# 1. Defines a simple neural network model with an embedding layer for MNIST digit classification.
# 2. Trains the model on the MNIST dataset.
# 3. Visualizes the embeddings of the MNIST digits in a 2D space using PCA.
# 4. Visualizes the loss landscape (simplified 1D representation) during training.
# 5. Enhances visualizations with seaborn aesthetics and matplotlib annotations.
# 6. Outputs intermediate data and visualizations for analysis and debugging.import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from torch.utils.data import DataLoader# 1. Define the Model with Embedding Layer
class EmbeddingModel(nn.Module):def __init__(self, embedding_dim=2, num_classes=10):super(EmbeddingModel, self).__init__()self.embedding = nn.Embedding(10, embedding_dim) # Embedding layer for digits 0-9 (one-hot encoded implicitly)self.fc = nn.Linear(embedding_dim, num_classes) # Linear layer for classificationdef forward(self, x):embedded = self.embedding(x) # Get embedding for input digit indexoutput = self.fc(embedded) # Classification layerreturn output# 2. Load MNIST Dataset and Data Loader
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) # MNIST normalization
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)# 3. Initialize Model, Loss Function, and Optimizer
model = EmbeddingModel()
criterion = nn.CrossEntropyLoss() # Cross-entropy loss for classification
optimizer = optim.Adam(model.parameters(), lr=0.01) # Adam optimizer# 4. Training Loop and Loss Tracking
epochs = 10
losses = [] # List to store loss values during trainingfor epoch in range(epochs):running_loss = 0.0for i, data in enumerate(train_loader, 0):inputs, labels = datainputs = labels # Use labels as input indices for embedding layer (simplified example for embedding visualization)optimizer.zero_grad() # Zero gradientsoutputs = model(inputs) # Forward passloss = criterion(outputs, labels) # Calculate lossloss.backward() # Backpropagationoptimizer.step() # Update weightsrunning_loss += loss.item()epoch_loss = running_loss / len(train_loader) # Average loss per epochlosses.append(epoch_loss) # Store epoch lossprint(f'Epoch {epoch+1}, Loss: {epoch_loss:.4f}')print('Finished Training')# 5. Visualize Embeddings using PCA
digit_indices = torch.arange(10) # Indices for digits 0-9
embeddings = model.embedding(digit_indices).detach().numpy() # Get embeddings for digits
pca = PCA(n_components=2) # PCA for 2D visualization
embeddings_pca = pca.fit_transform(embeddings) # Reduce embedding dimensionalityplt.figure(figsize=(8, 6))
sns.scatterplot(x=embeddings_pca[:, 0], y=embeddings_pca[:, 1], hue=np.arange(10), palette=sns.color_palette("tab10", 10), s=100) # Scatter plot of embeddings
plt.title('2D Embedding Visualization of MNIST Digits (PCA)', fontsize=14)
plt.xlabel('PCA Component 1', fontsize=12)
plt.ylabel('PCA Component 2', fontsize=12)
for i in range(10):plt.annotate(str(i), xy=(embeddings_pca[i, 0], embeddings_pca[i, 1]), xytext=(embeddings_pca[i, 0]+0.02, embeddings_pca[i, 1]+0.02), fontsize=10, color='black') # Annotate points with digit labels
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend(title='Digits', loc='upper right')
plt.tight_layout()
plt.show()# 6. Visualize Loss Landscape (Simplified 1D - Loss Curve)
plt.figure(figsize=(8, 5))
plt.plot(range(1, epochs + 1), losses, marker='o', linestyle='-', color='skyblue', linewidth=2) # Line plot of loss curve
plt.title('Loss Landscape (Simplified 1D - Loss Curve)', fontsize=14)
plt.xlabel('Epoch', fontsize=12)
plt.ylabel('Loss', fontsize=12)
plt.grid(True, linestyle=':', alpha=0.7)
plt.annotate(f'Final Loss: {losses[-1]:.4f}', xy=(epochs, losses[-1]), xytext=(epochs-2, losses[-1]+0.1),arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"), fontsize=10, color='darkgreen') # Annotation 1
plt.axhline(y=min(losses), color='red', linestyle='--', linewidth=1, label=f'Minimum Loss: {min(losses):.4f}') # Highlight 1
plt.legend(loc='upper right')
plt.tight_layout()
plt.show()# 7. Output Intermediate Data and Information
print("\n--- Embedding Vectors (Digit 0 to 9) ---")
print(embeddings)
print("\n--- PCA Reduced Embeddings (First 5) ---")
print(embeddings_pca[:5])
print("\n--- Loss Values per Epoch ---")
print(losses)
输出内容描述
嵌入向量 (数字 0 到 9)显示模型学习到的数字 0 到 9 的嵌入向量,展示特征在低维空间的表示。
PCA 降维后的嵌入向量 (前 5 个)输出使用 PCA 降维到 2D 后的前 5 个嵌入向量,用于可视化展示。
每轮训练的损失值显示每轮训练的平均损失值,用于观察损失景观的下降趋势。
MNIST 数字 2D 嵌入可视化散点图可视化展示 MNIST 数字的嵌入向量在 2D 空间中的分布,颜色区分不同数字,观察特征聚类情况。
损失景观简化 1D 表示折线图 (损失曲线)绘制损失曲线,展示训练过程中损失值随 epoch 变化的趋势,简化表示损失景观的下降过程。

代码功能实现

  1. 构建带嵌入层的模型:定义一个包含嵌入层的简单神经网络模型,用于 MNIST 数字分类。
  2. MNIST 数据集训练:使用 MNIST 数据集训练模型,学习数字的嵌入表示。
  3. 嵌入向量可视化:使用 PCA 将高维嵌入向量降维到 2D,并绘制散点图可视化数字的嵌入分布。
  4. 损失景观简化可视化:绘制损失曲线,展示训练过程中损失值的变化,简化表示损失景观的优化过程。
  5. 输出中间数据:输出嵌入向量、PCA 降维后的嵌入向量和损失值,方便分析和调试。

第六节:参考信息源

  1. 深度学习与嵌入表示

    • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. (第 5 章:Representation Learning)
    • LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436-444.
  2. 损失景观与优化

    • Li, H., Xu, Z., Taylor, G., Studer, C., & Goldstein, T. (2018). Visualizing the Loss Landscape of Neural Nets. Advances in Neural Information Processing Systems, 31.
    • Choromanska, A., Bachmann, P., Lossilla, D., Cremers, D., & Rackauckas, C. (2015). Open Problem: The Landscape of Deep Learning Networks. ArXiv Preprint ArXiv:1412.8776.
  3. 嵌入技术应用

    • Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. ArXiv Preprint ArXiv:1301.3781. (Word2Vec)
    • Pennington, J., Socher, R., & Manning, C. D. (2014). GloVe: Global Vectors for Word Representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). (GloVe)

参考文献链接

  1. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  2. LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436-444.
  3. Li, H., Xu, Z., Taylor, G., Studer, C., & Goldstein, T. (2018). Visualizing the Loss Landscape of Neural Nets. Advances in Neural Information Processing Systems, 31.
  4. Choromanska, A., Bachmann, P., Lossilla, D., Cremers, D., & Rackauckas, C. (2015). Open Problem: The Landscape of Deep Learning Networks. ArXiv Preprint ArXiv:1412.8776.
  5. Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. ArXiv Preprint ArXiv:1301.3781.
  6. Pennington, J., Socher, R., & Manning, C. D. (2014). GloVe: Global Vectors for Word Representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP).

关键词:

#嵌入原则
#数据特征
#损失景观
#嵌入函数
#损失函数
#梯度下降
#特征融入
#嵌入可视化
#损失景观可视化
#表示学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA|例化生成的PLL功能IP核

1、例化上一篇文章中调用的IP核,新建文件PLL_test.v 2、代码如图 timescale 1ns / 1ps module PLL_test(input clk,input rst_n,output clkout0,output clkout1,output clkout2,output clkout3,output clkout4);wire locked;PLL pll_inst(.inclk0(clk),.c0(clkout0)…

【C++】P5734 【深基6.例6】文字处理软件

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯题目描述输入格式输出格式示例输入与输出输入:输出: 💯我的做法操作1:在文档末尾插入字符串操作2&…

后盾人JS -- 原型

没有原型的对象 也有没有原型的对象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

洛谷 P1130 红牌 C语言

题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌。获得红牌的过程是相当复杂&#xff0c;一共包括 N 个步骤。每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件。为了加快进程&#xff0c;每一步政府都派了 M 个工作人员来检查材料。不幸的是&…

【线程】基于环形队列的生产者消费者模型

1 环形队列 环形队列采用数组来模拟&#xff0c;用取模运算来模拟环状特性。 1.如何判断环形队列为空或者为满? 当环形队列为空时&#xff0c;头和尾都指向同一个位置。当环形队列为满时&#xff0c;头和尾也都指向同一个位置。 因此&#xff0c; 可以通过加计数器或者标记…

商品列表及商品详情展示

前言 本文将展示一段结合 HTML、CSS 和 JavaScript 的代码&#xff0c;实现了一个简单的商品展示页面及商品详情&#xff0c;涵盖数据获取、渲染、搜索及排序等功能。 效果展示 点击不同的商品会展示对应的商品详情。 代码部分 代码总体实现 <!DOCTYPE html> <htm…

大模型综述一镜到底(全文八万字) ——《Large Language Models: A Survey》

论文链接&#xff1a;https://arxiv.org/abs/2402.06196 摘要&#xff1a;自2022年11月ChatGPT发布以来&#xff0c;大语言模型&#xff08;LLMs&#xff09;因其在广泛的自然语言任务上的强大性能而备受关注。正如缩放定律所预测的那样&#xff0c;大语言模型通过在大量文本数…

【C++】B2124 判断字符串是否为回文

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a;样例&#xff1a; &#x1f4af;方法一&#xff1a;我的第一种做法思路代码实现解析 &#x1f4af;方法二&#xff1a;我…

ubuntuCUDA安装

系列文章目录 移动硬盘制作Ubuntu系统盘 前言 根据前篇“移动硬盘制作Ubuntu系统盘”安装系统后&#xff0c;还不能够使用显卡。 如果需要使用显卡&#xff0c;还需要进行相关驱动的安装&#xff08;如使用的为Nvidia显卡&#xff0c;就需要安装相关的Nvidia显卡驱动&#xff…

Sqoop导入MySQL中含有回车换行符的数据

个人博客地址&#xff1a;Sqoop导入MySQL中含有回车换行符的数据 MySQL中的数据如下图&#xff1a; 检查HDFS上的目标文件内容可以看出&#xff0c;回车换行符位置的数据被截断了&#xff0c;导致数据列错位。 Sqoop提供了配置参数&#xff0c;在导入时丢弃掉数据的分隔符&…

掌握API和控制点(从Java到JNI接口)_36 JNI开发与NDK 04

4、 *.so的入口函数&#xff1a;JNI_OnLoad() VM (virtual machine)的角色 Java代码在VM上执行。在执行Java代码的过程中&#xff0c;如果Java需要与本地代码(*.so)沟通时&#xff0c; VM就会把*.so視为插件<Tn>而加载到VM里。然后让Java函数呼叫到这插件<Tn>里的…

[MRCTF2020]Ez_bypass1(md5绕过)

[MRCTF2020]Ez_bypass1(md5绕过) ​​ 这道题就是要绕过md5强类型比较&#xff0c;但是本身又不相等&#xff1a; md5无法处理数组&#xff0c;如果传入的是数组进行md5加密&#xff0c;会直接放回NULL&#xff0c;两个NuLL相比较会等于true&#xff1b; 所以?id[]1&gg…

90,【6】攻防世界 WEB Web_php_unserialize

进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file&#xff0c;默认值为 index.phpprivate $file index.php;// 构造函数&#xff0c;当创建类的实例时会自动调用// 接收一个参数 $file&#xff0c;用于初始化对象的 $file 属…

Jenkins安装部署(以及常见报错解决方案),jdk版本控制器sdkman

目录 零、环境介绍 一、Jenkins安装 1、插件安装以及更换插件源 2、修改jenkins时区 二、sdkman安装&#xff08;可选&#xff09; 1、sdkman常用方法 2、sdkman常用方法演示 2.1、查看可用的jdk 2.2、下载jdk并切换版本 三、jenkins报错解决 1、下载sdkman后systemc…

c语言练习题【数据类型、递归、双向链表快速排序】

练习1&#xff1a;数据类型 请写出以下几个数据的数据类型 整数 a a 的地址 存放a的数组 b 存放a的地址的数组 b的地址 c的地址 指向 printf 函数的指针 d 存放 d的数组 整数 a 的类型 数据类型是 int a 的地址 数据类型是 int*&#xff08;指向 int 类型的指针&#xff09; …

联想拯救者Y9000P IRX8 2023 (82WK) 原厂Win11 家庭中文版系统 带一键还原功能 安装教程

安装完重建winre一键还原功能&#xff0c;和电脑出厂时的系统状态一模一样。自动机型专用软件&#xff0c;全部驱动&#xff0c;主题壁纸&#xff0c;自动激活&#xff0c;oem信息等。将电脑系统完全恢复到出厂时状态。 支持机型 (MTM) : 82WK 系统版本&#xff1a;Windows 1…

深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)

深入解析“legit”的地道用法——从俚语到正式表达 一、引言 在社交媒体、科技圈甚至日常对话中&#xff0c;我们经常会看到或听到“legit”这个词。比如最近 Sam Altman 在 X&#xff08;原 Twitter&#xff09;上发的一条帖子中写道&#xff1a; we will obviously deliver …

Vue 图片引用方式详解:静态资源与动态路径访问

目录 前言1. 引用 public/ 目录2. assets/ 目录3. 远程服务器4. Vue Router 动态访问5. 总结6. 扩展&#xff08;图片不显示&#xff09; 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 在 Vue 开发中&#x…

DeepSeek-R1 本地部署教程(超简版)

文章目录 一、DeepSeek相关网站二、DeepSeek-R1硬件要求三、本地部署DeepSeek-R11. 安装Ollama1.1 Windows1.2 Linux1.3 macOS 2. 下载和运行DeepSeek模型3. 列出本地已下载的模型 四、Ollama命令大全五、常见问题解决附&#xff1a;DeepSeek模型资源 一、DeepSeek相关网站 官…

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…