哪个网站做欧洲旅游攻略好html5 手机网站导航条
2026/5/21 18:24:08 网站建设 项目流程
哪个网站做欧洲旅游攻略好,html5 手机网站导航条,百度怎么做推广,wordpress调样式文章目录 一、数据流程#xff08;5步走#xff09;第1步#xff1a;原始数据是什么#xff1f;第2步#xff1a;加载数据#xff08;把文件读成数组#xff09;第3步#xff1a;采样#xff08;减少数量#xff0c;加快实验#xff09;第4步#xff1a;展平成向量…文章目录一、数据流程5步走第1步原始数据是什么第2步加载数据把文件读成数组第3步采样减少数量加快实验第4步展平成向量最关键第5步计算L2距离二、图片如何被压扁用例子说明例子12×2的小图片理解原理例子232×32的真实图片三、reshape的工作原理四、实际代码演示kNN需要向量才能算距离所以必须把图片从(32, 32, 3)展平成(3072,)向量。每个3072维向量就是一张图片的所有像素信息排成一行。类比就像把一张照片从左到右、从上到下扫描一遍变成一串数字然后比较两串数字的相似程度。整体流程图像文件 → 加载成数组 → 采样减少数量 → 展平成向量 → 计算距离一、数据流程5步走第1步原始数据是什么CIFAR-10数据集5万个训练图片 1万个测试图片每张图片32×32像素RGB彩色。存储格式存在pickle文件里每个文件存1万张图片。图片被压扁成一串数字(10000, 3072)3072 32×32×3宽×高×RGB。第2步加载数据把文件读成数组代码cs231n/data_utils.pydefload_CIFAR_batch(filename):withopen(filename,rb)asf:datadictload_pickle(f)Xdatadict[data]# 形状 (10000, 3072) - 一串数字Ydatadict[labels]# 10000个标签# 重新整理成图片格式XX.reshape(10000,3,32,32)# 变成 (10000, 3, 32, 32)XX.transpose(0,2,3,1)# 变成 (10000, 32, 32, 3)XX.astype(float)# 转成浮点数returnX,Y代码解释reshape(10000, 3, 32, 32)把3072个数字重新排列变成3个通道、每个32×32的图片transpose(0,2,3,1)调整维度顺序从(通道,高,宽)变成(高,宽,通道)这样Matplotlib才能正确显示astype(float)把整数像素值0-255转成浮点数方便计算加载完整数据集defload_CIFAR10(ROOT):xs,ys[],[]# 加载5个训练批次forbinrange(1,6):X,Yload_CIFAR_batch(fdata_batch_{b})xs.append(X)# 每个X形状 (10000, 32, 32, 3)ys.append(Y)# 合并所有训练数据Xtrnp.concatenate(xs)# (50000, 32, 32, 3)Ytrnp.concatenate(ys)# (50000,)# 加载测试数据Xte,Yteload_CIFAR_batch(test_batch)returnXtr,Ytr,Xte,Yte结果训练集5个文件合并 →(50000, 32, 32, 3)5万张图片测试集1个文件 →(10000, 32, 32, 3)1万张图片第3步采样减少数量加快实验代码knn.ipynb# 采样训练数据num_training5000masklist(range(num_training))X_trainX_train[mask]# 从50000采样到5000y_trainy_train[mask]# 采样测试数据num_test500masklist(range(num_test))X_testX_test[mask]# 从10000采样到500y_testy_test[mask]代码解释list(range(5000))生成索引[0,1,2,…,4999]X_train[mask]用索引切片只取前5000个样本为什么采样数据太多算得慢先拿一部分试试效果结果训练集(5000, 32, 32, 3)测试集(500, 32, 32, 3)第4步展平成向量最关键代码knn.ipynb# Reshape the image data into rowsX_trainnp.reshape(X_train,(X_train.shape[0],-1))X_testnp.reshape(X_test,(X_test.shape[0],-1))print(X_train.shape,X_test.shape)# 输出: (5000, 3072) (500, 3072)代码解释X_train.shape[0]第一维大小即5000样本数-1自动计算-1 32×32×3 3072reshape(5000, -1)保持5000行把后面的维度展平成一列第5步计算L2距离现在每张图片都是向量了可以算距离了代码knn.ipynbclassifierKNearestNeighbor()classifier.train(X_train,y_train)# 只是保存数据不训练distsclassifier.compute_distances_two_loops(X_test)# dists 形状: (500, 5000)# dists[i, j] 第i个测试图片和第j个训练图片的距离距离计算代码k_nearest_neighbor.pydefcompute_distances_two_loops(self,X):num_testX.shape[0]# 500num_trainself.X_train.shape[0]# 5000distsnp.zeros((num_test,num_train))foriinrange(num_test):forjinrange(num_train):# 计算L2距离对应位置相减、平方、求和、开根号dists[i,j]np.sqrt(np.sum((X[i]-self.X_train[j])**2))returndists代码解释X[i]第i个测试样本形状(3072,)self.X_train[j]第j个训练样本形状(3072,)(X[i] - self.X_train[j])对应位置相减形状(3072,)** 2每个元素平方np.sum(...)求和得到一个数np.sqrt(...)开根号得到距离距离公式d ∑ k 1 3072 ( x k − y k ) 2 d \sqrt{\sum_{k1}^{3072}(x_k - y_k)^2}d∑k13072​(xk​−yk​)2​就是两个向量对应位置差的平方和再开根号。二、图片如何被压扁用例子说明例子12×2的小图片理解原理假设有一张2×2像素的RGB图片形状是(2, 2, 3)# 原始图片 (2, 2, 3)image[# 第1行[[100,150,200],# 像素(0,0): R100, G150, B200[110,160,210]],# 像素(0,1): R110, G160, B210# 第2行[[120,170,220],# 像素(1,0): R120, G170, B220[130,180,230]]# 像素(1,1): R130, G180, B230]展平过程# 用reshape展平vectornp.reshape(image,(-1,))# 结果: [100, 150, 200, 110, 160, 210, 120, 170, 220, 130, 180, 230]# ↑像素(0,0)↑ ↑像素(0,1)↑ ↑像素(1,0)↑ ↑像素(1,1)↑规律按行优先顺序从左到右、从上到下把每个像素的RGB值依次排列。例子232×32的真实图片一张32×32的RGB图片形状是(32, 32, 3)# 原始图片 (32, 32, 3)image[# 第1行32个像素[[R00,G00,B00],[R01,G01,B01],...,[R0_31,G0_31,B0_31]],# 第2行32个像素[[R10,G10,B10],[R11,G11,B11],...,[R1_31,G1_31,B1_31]],# ...# 第32行32个像素[[R31_0,G31_0,B31_0],...,[R31_31,G31_31,B31_31]]]展平过程vectornp.reshape(image,(-1,))# 结果: [R00, G00, B00, R01, G01, B01, ..., R0_31, G0_31, B0_31,# R10, G10, B10, R11, G11, B11, ..., R1_31, G1_31, B1_31,# ...# R31_0, G31_0, B31_0, ..., R31_31, G31_31, B31_31]长度计算32行 × 32列 × 3通道 3072个数字三、reshape的工作原理reshape不改变数据只改变排列方式# 原始数据在内存中是一串连续的数字# reshape只是告诉NumPy如何解释这串数字# 例子12个数字data[1,2,3,4,5,6,7,8,9,10,11,12]# 解释成 2×2×3 的图片imagenp.reshape(data,(2,2,3))# [[[1, 2, 3], [4, 5, 6]],# [[7, 8, 9], [10, 11, 12]]]# 解释成 12 的向量展平vectornp.reshape(image,(-1,))# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]# 数据没变只是形状变了关键理解数据在内存中就是一串连续的数字reshape只是改变如何解释这串数字从(32, 32, 3)变成(3072,)数据本身没变只是从三维表格变成了一维列表四、实际代码演示importnumpyasnp# 创建一张2×2的RGB图片随机值imagenp.random.randint(0,255,(2,2,3))print(原始图片形状:,image.shape)# (2, 2, 3)print(原始图片:\n,image)# [[[100 150 200]# [110 160 210]]# [[120 170 220]# [130 180 230]]]# 展平vectornp.reshape(image,(-1,))print(\n展平后形状:,vector.shape)# (12,)print(展平后:,vector)# [100 150 200 110 160 210 120 170 220 130 180 230]# 验证可以还原回去image2np.reshape(vector,(2,2,3))print(\n还原后是否相同:,np.array_equal(image,image2))# True32×32图片的展平过程可视化原始图片 (32, 32, 3): ┌─────────────────────────┐ │ [R G B] [R G B] ... │ ← 第1行32个像素 │ [R G B] [R G B] ... │ ← 第2行32个像素 │ ... │ │ [R G B] [R G B] ... │ ← 第32行32个像素 └─────────────────────────┘ ↓ reshape ↓ 展平向量 (3072,): [R G B R G B ... R G B R G B ... ... R G B ... R G B] ↑第1行↑ ↑第2行↑ ↑第32行↑结果每张图片变成一个3072维的向量一串3072个数字。数据形状变化表步骤训练集测试集说明文件里(10000, 3072)(10000, 3072)压扁的数字加载后(50000, 32, 32, 3)(10000, 32, 32, 3)图片格式采样后(5000, 32, 32, 3)(500, 32, 32, 3)减少数量展平后(5000, 3072)(500, 3072)向量格式距离矩阵-(500, 5000)测试×训练为什么是3072维32 × 32 1024像素数1024 × 3 3072每个像素有RGB三个通道所以每张图片展平后是3072个数字

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询