import torch
import torch.nn as nn
from torchvision import transforms
def extract_pc(image, pc=3):
channel, height, width = image.shape # input float tensor image with CxHxW
# data = image.view(channel, height*width)
data = image.contiguous().view(channel, height * width)
data_c = data - data.mean(dim=1).unsqueeze(1)
u, s, vt = torch.svd(data_c.matmul(data_c.T))
sorted_data, indices = s.sort(descending=True)
image_pc = u[:, indices[0:pc]].T.matmul(data)
return image_pc.view(pc, height, width)
def std_norm(image):
image = image.permute(1, 2, 0).numpy()
trans = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(torch.tensor(image).mean(dim=[0, 1]), torch.tensor(image).std(dim=[0, 1]))
])
return trans(image)
def one_zero_norm(image):
channel, height, width = image.shape
data = image.view(channel, height*width)
data_max = data.max(dim=1)[0]
data_min = data.min(dim=1)[0]
data = (data-data_min.unsqueeze(1))/(data_max.unsqueeze(1) - data_min.unsqueeze(1))
return data.view(channel, height, width)
def construct_sample(image, windows=27):
_, height, width = image.shape
half_window = int(windows/2)
pad = nn.ReplicationPad2d(half_window)
pad_image = pad(image.unsqueeze(0)).squeeze(0)
batch_image_indices = torch.zeros((height*width, 4), dtype=torch.long)
t = 0
for h in range(height):
for w in range(width):
batch_image_indices[t, :] = torch.tensor([h, h+windows, w, w+windows])
t += 1
return pad_image, batch_image_indices
def label_transform(gt):
label = torch.unique(gt)
gt_new = torch.zeros_like(gt)
for each in range(len(label)):
indices = torch.where(gt == label[each])
if label[0] == 0:
gt_new[indices] = each - 1
else:
gt_new[indices] = each
label_new = torch.unique(gt_new)
return gt_new
def label_inverse_transform(predict_result, gt):
label_origin = torch.unique(gt)
label_predict = torch.unique(predict_result)
predict_result_origin = torch.zeros_like(predict_result)
for each in range(len(label_predict)):
indices = torch.where(predict_result == label_predict[each])
if len(label_predict) != len(label_origin):
predict_result_origin[indices] = label_origin[each + 1]
else:
predict_result_origin[indices] = label_origin[each]
return predict_result_origin
def select_sample(gt, ntr):
gt_vector = gt.reshape(-1, 1).squeeze(1)
label = torch.unique(gt)
for each in range(len(label)):
indices_vector = torch.where(gt_vector == label[each]) # 1 tuple 返回一维的索引
indices = torch.where(gt == label[each]) # 2 tuple 返回二维的索引
indices_vector = indices_vector[0]
indices_row = indices[0]
indices_column = indices[1]
# 背景 -1
# 10776
if label[each] == -1:
no_gt_indices = torch.cat([indices_vector.unsqueeze(1),
indices_row.unsqueeze(1),
indices_column.unsqueeze(1)],
dim=1
)
no_gt_num = torch.tensor(len(indices_vector))
else:
class_num = torch.tensor(len(indices_vector))
rand_indices0 = torch.randperm(class_num)
rand_indices = indices_vector[rand_indices0]
# indian_pines
# num_workers = [30, 150, 150, 100, 150, 150, 20, 150, 15, 150, 150, 150, 150, 150, 50, 50]
# paviau
# num_workers = [150, 150, 150, 150, 150, 150, 150, 150, 150]
# KSC
num_workers = [33, 23, 24, 24, 15, 22, 9, 38, 51, 39, 41, 49, 91]
sel_num = num_workers[each - 1]
sel_num = torch.tensor(sel_num)
tr_ind0 = rand_indices0[0:sel_num]
te_ind0 = rand_indices0[sel_num:]
tr_ind = rand_indices[0:sel_num]
te_ind = rand_indices[sel_num:]
# 训练集:索引+坐标
sel_tr_ind = torch.cat([
tr_ind.unsqueeze(1),
indices_row[tr_ind0].unsqueeze(1),
indices_column[tr_ind0].unsqueeze(1)
], dim=1)
# 测试集:
sel_te_ind = torch.cat([
te_ind.unsqueeze(1),
indices_row[te_ind0].unsqueeze(1),
indices_column[te_ind0].unsqueeze(1)
], dim=1)
if each == 1:
train_indices = sel_tr_ind
train_num = sel_num.unsqueeze(0)
test_indices = sel_te_ind
test_num = (class_num - sel_num).unsqueeze(0)
else:
train_indices = torch.cat([train_indices, sel_tr_ind], dim=0)
train_num = torch.cat([train_num, sel_num.unsqueeze(0)])
test_indices = torch.cat([test_indices, sel_te_ind], dim=0)
test_num = torch.cat([test_num, (class_num - sel_num).unsqueeze(0)])
# 训练集
rand_tr_ind = torch.randperm(train_num.sum())
train_indices = train_indices[rand_tr_ind, ]
# 测试集
rand_te_ind = torch.randperm(test_num.sum()) # torch.Size([42506])
test_indices = test_indices[rand_te_ind, ]
# 背景图
rand_no_gt_ind = torch.randperm(no_gt_num.sum())
no_gt_indices = no_gt_indices[rand_no_gt_ind, ]
data_sample = {'train_indices': train_indices, 'train_num': train_num,
'test_indices': test_indices, 'test_num': test_num,
'no_gt_indices': no_gt_indices, 'no_gt_num': no_gt_num.unsqueeze(0)}
return data_sample
Paper-Repetition-EMFFN
需积分: 0 22 浏览量
更新于2022-11-29
收藏 12KB ZIP 举报
"Paper-Repetition-EMFFN" 指的可能是一篇研究论文或项目的名称,其中“Repetition”可能涉及数据重复性或者模式识别的主题,“EMFFN”可能是作者提出的一种新的模型或者方法,全称为“Embedding and Mixture of First-Order Factor Networks”。在AI和机器学习领域,这种命名通常代表一种融合了嵌入(Embedding)技术和第一阶因子混合(Mixture of First-Order Factors)的神经网络模型。
虽然描述中只给出了"Paper-Repetition-EMFFN",但这可能意味着该项目或论文主要探讨如何通过EMFFN模型来处理数据中的重复性问题,比如在文本生成、序列建模或自然语言处理任务中,识别和消除重复的模式。
"codemirror" 是一个流行的开源代码编辑器,常用于在线编程环境或Web应用中,允许用户编写和展示代码。在这个上下文中,标签可能意味着项目包含了一个使用CodeMirror的代码示例或交互式环境,用于展示或测试EMFFN模型的实现。
【压缩包子文件的文件名称列表】
1. `run.py`:这是一个Python脚本,通常用于运行整个项目或实验。它可能包含了初始化EMFFN模型,加载数据,训练,验证以及可能的预测步骤。
2. `tools`:这个目录可能包含了一系列辅助工具或脚本,如数据预处理工具、可视化工具或其他实用函数。
3. `data`:数据目录,存储了用于训练和测试EMFFN模型的数据集。可能包括原始文本文件、预处理后的数据文件,或者用于评估模型性能的基准数据。
4. `model`:模型目录,可能保存了EMFFN模型的定义文件,如Keras、PyTorch或TensorFlow的模型结构和权重。
5. `configs`:配置文件夹,通常包含设置参数的文件,如模型超参数、训练设置、数据加载选项等,用于控制模型的训练过程。
"Paper-Repetition-EMFFN"项目可能涉及一个创新的神经网络模型,用于解决数据中的重复性问题。项目使用Python进行开发,并通过`run.py`脚本运行模型,数据存储在`data`目录下,模型结构和配置位于`model`和`configs`目录。此外,项目还利用了`tools`目录中的辅助工具,而交互式代码展示可能依赖于`codemirror`。对于想要理解和复现这个研究的人来说,这些文件提供了必要的资源和代码实现。
nononoAA
- 粉丝: 0
- 资源: 1
最新资源
- 基于前端vue3+element-plus,后端springboot+mysql的智慧云党建系统,BS架构全部资料+高分项目+详细文档.zip
- gripper-anhe
- 基于情感分析的智慧养老系统详细文档+全部资料+高分项目.zip
- 基于停车场系统后台管理,新能源电动车充电系统,智慧社区物业人脸门禁后台管理全部资料+高分项目+详细文档.zip
- 基于微家政-智慧社区家政服务系统全部资料+高分项目+详细文档.zip
- 基于认知计算的智慧就业服务系统全部资料+高分项目+详细文档.zip
- 基于至文掌上社区系统微信小程序端,街道居委在线服务小程序、智慧社区小程序系统全部资料+高分项目+详细文档.zip
- 基于云C智慧药店系统全部资料+高分项目+详细文档.zip
- 基于智慧办公室就是以办公室为平台,兼具办公室环境、办公、设备信息化、设 备智能化、考勤自动化、办公智能化,集系统、结构、服务、管理、监督于一体, 具有高效、安全
- 基于智慧仓库管理系统全部资料+高分项目+详细文档.zip
- 基于智慧城市交通策略优化与调控系统 前端项目全部资料+高分项目+详细文档.zip
- 基于智慧城市大屏可视化系统全部资料+高分项目+详细文档.zip
- 基于智慧城市空气质量预测与分析系统全部资料+高分项目+详细文档.zip
- 基于智慧档案管理系统全部资料+高分项目+详细文档.zip
- 基于智慧点餐系统正式成立全部资料+高分项目+详细文档.zip
- 基于智慧工匠,智能排产系统框架全部资料+高分项目+详细文档.zip