TCA笔记2:TCA代码调试

Transfer Component Analysis

属于边缘分布自适应方法

本文为TCA代码的调试

TCA计算过程的公式见:

https://blog.csdn.net/lagoon_lala/article/details/120514537

对TCA开源代码的详细阅读分析:

https://blog.csdn.net/lagoon_lala/article/details/120800667

本次尝试跑王晋东在GitHub的开源TCA代码

学习过程中参考:

https://github.com/jindongwang/transferlearning-tutorial

https://zhuanlan.zhihu.com/p/63026435

https://zhuanlan.zhihu.com/p/110594052

https://zhuanlan.zhihu.com/p/26764147

尝试跑TCA代码

使用数据集(Office-Caltech10):

该网站第一组

https://github.com/jindongwang/transferlearning/tree/master/data

使用代码:

https://github.com/jindongwang/transferlearning/tree/cfaf1174dff7390a861cc4abd5ede37dfa1063f5/code/traditional/TCA

激活虚拟环境

(base) C:\Users\Lenovo>activate Liver

进入项目文件夹路径

(Liver) C:\Users\Lenovo>cd /d D:\anacondaProject\TCA

运行py文件:

python TCA.py

报错:

FileNotFoundError: [Errno 2] No such file or directory: 'data_office_caltech_10/amazon.mat'

看了一下, 文件夹里都是图片, 没有.mat形式

参考:

https://blog.csdn.net/zuoriqingkong/article/details/79986785

.mat的是特征文件.

3个对象领域Amazon(在线电商图片)、Webcam(网络摄像头拍摄的低解析度图片)、DSLR(单反相机拍摄的高解析度图片)

注意不要下载原图original images, SURF dataset中有.mat文件, DeCAF dataset用之前需要运行readme中的normr代码. 这里为了快捷就使用SURF了

运行报错:

Xs, Ys, Xt, Yt = src_domain['feas'], src_domain['labels'], tar_domain['feas'], tar_domain['labels']

KeyError: 'labels'

打印src_domain

print('src_domain type:',type(src_domain),'\nsrc_domain:',src_domain)

src_domain type: <class 'dict'>

src_domain: {'__header__': …, 'feas': array([[-0.29043361, …, -0.19295982],

       [-0.29043361, …, -0.19295982],

       ...

       ]), 'label': array([[ 1],…

这里的label键名少了个s, 修改读取行:

Xs, Ys, Xt, Yt = src_domain['feas'], src_domain['label'], tar_domain['feas'], tar_domain['label']

运行成功.

Accuracy of mapped source and target1 data : 0.400

Accuracy of mapped target2 data            : 0.371

这效果不行啊, 换DeCAF版本的数据集试试

这个版本的读入标签为

Xs, Ys, Xt, Yt = src_domain['feas'], src_domain['labels'], tar_domain['feas'], tar_domain['labels']

运行得:

Accuracy of mapped source and target1 data : 0.800

Accuracy of mapped target2 data            : 0.706

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
下面是使用小生境选择算法的遗传算法的MATLAB代码实现: ```matlab function [bestsol, bestval] = ga_tsp_spea2(dmat, popsize, numgen, pc, pm) % dmat: 距离矩阵 % popsize: 种群大小 % numgen: 迭代次数 % pc: 交叉概率 % pm: 变异概率 n = size(dmat, 1); % 城市数量 dvec = reshape(dmat, n^2, 1); % 距离向量 % 创建初始种群 pop = zeros(popsize, n); for i = 1 : popsize pop(i,:) = randperm(n); end % 初始化评价指标和可行性指标 fit = zeros(popsize, 1); feas = zeros(popsize, 1); % 计算每个个体的适应度和可行性 for i = 1 : popsize dist = dvec((pop(i,n)-1)*n + pop(i,1)); for j = 2 : n dist = dist + dvec((pop(i,j-1)-1)*n + pop(i,j)); end fit(i) = 1 / dist; % 最小化距离,因此逆距离作为适应度 feas(i) = (length(unique(pop(i,:))) == n); % 检查是否存在重复城市 end % SPEA2算法的参数设置 k = sqrt(popsize); % 每个集合的大小 num_arch = 2 * popsize; % 存档的个体数量 arch = zeros(num_arch, n); % 存档的个体 % 进化 for i = 1 : numgen % 计算每个个体的生存值 S = zeros(popsize, 1); for j = 1 : popsize S(j) = sum(fit <= fit(j) & feas); end % 计算每个个体的距离值 R = zeros(popsize, 1); for j = 1 : popsize dist = sqrt(sum((pop - repmat(pop(j,:), popsize, 1)).^2, 2)); R(j) = min(dist(fit > fit(j) & feas)); end % 计算每个个体的均衡值 F = S + R; % 创建存档 arch(1:popsize,:) = pop; arch(popsize+1:num_arch,:) = randperm(n, num_arch-popsize); % 计算存档个体之间的距离值 D = pdist2(arch, arch); D(logical(eye(num_arch))) = inf; [D_sort, D_idx] = sort(D, 2); D_k = D_sort(:, k+1); % 计算每个个体的原始适应度 fit_orig = fit; for j = 1 : popsize fit(j) = sum(F(D_idx(j,:) <= D_k(j))); end % 选择 p = fit / sum(fit); newpop = zeros(popsize, n); for j = 1 : popsize idx1 = roul_wheel(p); idx2 = roul_wheel(p); if (rand < pc) % 交叉 child = cross(pop(idx1,:), pop(idx2,:)); else % 复制 child = pop(idx1,:); end if (rand < pm) % 变异 child = muta(child); end newpop(j,:) = child; end % 更新种群 pop = newpop; end % 找到最佳个体 bestval = max(fit_orig); bestidx = find(fit_orig == bestval, 1); bestsol = pop(bestidx,:); end % 选择算子-轮盘赌 function idx = roul_wheel(p) cump = cumsum(p); idx = find(cump >= rand, 1); end % 交叉算子-顺序杂交 function child = cross(parent1, parent2) n = length(parent1); child = zeros(1, n); startpos = ceil(rand * n); endpos = mod(startpos + ceil(rand * (n-1)), n) + 1; for i = startpos : endpos child(i) = parent1(i); end idx = mod(endpos:n, n) + 1; j = 1; for i = 1 : n if (child(i) == 0) while (ismember(parent2(j), child)) j = j + 1; end child(i) = parent2(j); end end end % 变异算子-交换型变异 function child = muta(parent) n = length(parent); child = parent; pos1 = ceil(rand * n); pos2 = ceil(rand * n); while (pos2 == pos1) pos2 = ceil(rand * n); end child([pos1 pos2]) = child([pos2 pos1]); end ``` 这个实现使用了SPEA2算法进行种群选择,其中包含了三个指标:适应度、生存值和距离值。同时,它还实现了轮盘赌选择、顺序杂交和交换型变异等基本算子。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值