relation from “X“ to“Y ”would cause an Invalid circular inheritance /realization combination

在画图的时候突然遇到这样的问题


relation from “X“ to“Y ”would cause an Invalid circular inheritance /realization combination(关系X到Y将会导致一个无效的继承或者实现组合)

这是个什么鬼?今天仔细找了一下原因。

原来如此:

已经在X和Y之间建立了X继承(实现)Y关系,那么再想建立Y继承(实现)X关系,你必须先把原先的关系删掉,才可以,否则就会报上面的错误。



问题又来了,我已经删了怎么还是不行?

那就要看你是怎样删除的,如果你是这样删除的:



或者直接按Delete键,这样是不可以滴。

因为这样删除,只是在绘图区中删除了它,而且它并没有真正的删除。

要想真正的删除一个东西,怎么办呢?

在右边的目录区删除,或者直接按Ctrl + D组合键,或者如下方法:



删除了的关系怎样在图中找到它呢:

其实可以这样,再原先的图上再画一遍原先的关系就可以了。




### 关于 Relation Network 的 Few-Shot Learning 复现 #### 使用 PyTorch 实现 Relation Network 以下是基于 PyTorch 的 Relation Network 实现代码示例: ```python import torch import torch.nn as nn import torch.optim as optim from torchvision import transforms, datasets class CNNEncoder(nn.Module): """CNN Encoder""" def __init__(self): super(CNNEncoder, self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, padding=0), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2)) self.layer2 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=0), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2)) self.layer3 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.ReLU()) self.layer4 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.ReLU()) def forward(self, x): out = self.layer1(x) out = self.layer2(out) out = self.layer3(out) out = self.layer4(out) return out.view(out.size(0), -1) class RelationNetwork(nn.Module): """Relation Network""" def __init__(self, input_size, hidden_size): super(RelationNetwork, self).__init__() self.fc1 = nn.Linear(input_size*2, hidden_size) self.fc2 = nn.Linear(hidden_size, 1) def forward(self, x): out = torch.relu(self.fc1(x)) out = torch.sigmoid(self.fc2(out)) return out def train(model_encoder, model_relation, optimizer, criterion, support_set, query_set, device='cpu'): model_encoder.train() model_relation.train() support_features = model_encoder(support_set.to(device)) # Extract features from the support set query_features = model_encoder(query_set.to(device)) # Extract features from the query set relations = [] for i in range(len(support_features)): pair_feature = torch.cat([support_features[i], query_features], dim=-1) # Concatenate pairs of features relation_score = model_relation(pair_feature).view(-1) # Compute similarity score relations.append(relation_score) output = torch.stack(relations).squeeze() # Stack all scores into a tensor target = torch.zeros(output.shape[0]).to(device) # Create ground truth labels loss = criterion(output, target) # Calculate loss optimizer.zero_grad() loss.backward() optimizer.step() return loss.item() ``` 上述代码实现了 `CNNEncoder` 和 `RelationNetwork`,并定义了一个简单的训练函数。 --- #### TensorFlow 实现 Relation Network 下面是基于 TensorFlow 的 Relation Network 实现代码示例: ```python import tensorflow as tf from tensorflow.keras.layers import Conv2D, BatchNormalization, MaxPooling2D, Flatten, Dense, ReLU, Input, concatenate from tensorflow.keras.models import Model def create_cnn_encoder(): inputs = Input(shape=(84, 84, 3)) x = Conv2D(filters=64, kernel_size=3)(inputs) x = BatchNormalization()(x) x = ReLU()(x) x = MaxPooling2D(pool_size=2)(x) x = Conv2D(filters=64, kernel_size=3)(x) x = BatchNormalization()(x) x = ReLU()(x) x = MaxPooling2D(pool_size=2)(x) x = Conv2D(filters=64, kernel_size=3, padding="same")(x) x = BatchNormalization()(x) x = ReLU()(x) x = Conv2D(filters=64, kernel_size=3, padding="same")(x) x = BatchNormalization()(x) x = ReLU()(x) outputs = Flatten()(x) encoder_model = Model(inputs=inputs, outputs=outputs, name="cnn_encoder") return encoder_model def create_relation_network(input_dim, hidden_units): feature_a = Input(shape=input_dim) feature_b = Input(shape=input_dim) concatenated = concatenate([feature_a, feature_b]) x = Dense(units=hidden_units, activation="relu")(concatenated) x = Dense(units=1, activation="sigmoid")(x) relation_model = Model(inputs=[feature_a, feature_b], outputs=x, name="relation_network") return relation_model # Example usage encoder = create_cnn_encoder() relation_net = create_relation_network(input_dim=1600, hidden_units=8) ``` 此代码展示了如何使用 Keras API 构建 CNN 编码器和关系网络模型。 --- #### 方法概述 Relation Network 是一种通过学习嵌入空间中的相似性来解决小样本分类问题的有效方法[^2]。其核心思想在于设计一个深度非线性距离度量函数,该函数能够捕捉查询样本和支持集之间的关系。相比其他元学习方法,Relation Network 更加简洁高效,在多种任务上表现出色。 为了验证其实效性,可以采用 Omniglot 或 Mini-ImageNet 数据集进行实验,并按照 N-way-K-shot 设置划分支持集与查询集。 ---
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值