我正在尝试使用我的自定义数据修改 Resnet50,如下所示:
X = [[1.85, 0.460,... -0.606] ... [0.229, 0.543,... 1.342]]
y = [2, 4, 0, ... 4, 2, 2]
Run Code Online (Sandbox Code Playgroud)
X 是 784 张图像的长度为 2000 的特征向量。y 是一个大小为 784 的数组,包含标签的二进制表示。
这是代码:
def __classifyRenet(self, X, y):
image_input = Input(shape=(2000,1))
num_classes = 5
model = ResNet50(weights='imagenet',include_top=False)
model.summary()
last_layer = model.output
# add a global spatial average pooling layer
x = GlobalAveragePooling2D()(last_layer)
# add fully-connected & dropout layers
x = Dense(512, activation='relu',name='fc-1')(x)
x = Dropout(0.5)(x)
x = Dense(256, activation='relu',name='fc-2')(x)
x = Dropout(0.5)(x)
# a …Run Code Online (Sandbox Code Playgroud) 我有大约 30% 和 70% 的 0 类(少数类)和 1 类(多数类)。由于我没有很多数据,我计划对少数类进行过采样以平衡这些类,使其成为 50-50 的分割。我想知道是否应该在将数据拆分为训练集和测试集之前或之后进行过采样。我通常在在线示例中拆分之前看到它完成,如下所示:
df_class0 = train[train.predict_var == 0]
df_class1 = train[train.predict_var == 1]
df_class1_over = df_class1.sample(len(df_class0), replace=True)
df_over = pd.concat([df_class0, df_class1_over], axis=0)
Run Code Online (Sandbox Code Playgroud)
然而,这是否意味着测试数据可能有来自训练集的重复样本(因为我们对训练集进行了过采样)?这意味着测试性能不一定基于新的、看不见的数据。我这样做很好,但我想知道什么是好的做法。谢谢!
classification machine-learning scikit-learn train-test-split imbalanced-data
我将数据拆分为训练/测试。当我使用 PCA 时,它是直截了当的。
from sklearn.decomposition import PCA
pca = PCA()
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
Run Code Online (Sandbox Code Playgroud)
从这里我可以在下一步中使用 X_train_pca 和 X_test_pca 等等..
但是当我使用 t-SNE
from sklearn.manifold import TSNE
X_train_tsne = TSNE(n_components=2, random_state=0).fit_transform(X_train)
Run Code Online (Sandbox Code Playgroud)
我似乎无法转换测试集,以便我可以将 t-SNE 数据用于下一步,例如 SVM。
有什么帮助吗?
我已经构建了一个 Keras 模型,用于从文本输入的原始输入中提取信息。我得到了 0.9869 的准确度。我如何知道哪些训练数据使准确度变低?我已经粘贴了我在下面使用的代码。
import numpy as np
from keras.models import Model, load_model
from keras.layers import Input, Dense, LSTM, Activation, Bidirectional, Dot, Flatten
from keras.callbacks import ModelCheckpoint
x_nyha = np.load("data/x_nyha.npy")
y_nyha = np.load("data/y/y_nyha.npy")
print(x_nyha.shape)
print(y_nyha.shape)
input_shape = x_nyha.shape[1:3]
X = Input(shape=input_shape)
A = Bidirectional(LSTM(512, return_sequences=True), merge_mode='concat')(X)
D = Dense(900, activation='relu')(A)
E = Dense(1, activation='sigmoid')(D)
Y = Flatten()(E)
model = Model(X, Y)
model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
batch_size = 128
num_epochs = 50
model.fit(x_nyha, y_nyha, batch_size=batch_size, epochs=num_epochs, verbose=1)
Run Code Online (Sandbox Code Playgroud) 数据集 0-9 列:浮动特征(产品的参数) 10 列:int 标签(产品)
目标
计算标签的 0-1 分类确定性分数(这是我当前的代码应该做的)
为每行 (22'000) 的每个“product_name”(300 列)计算相同的确定性分数
错误我使用 sklearn.tree.DecisionTreeClassifier。我正在尝试使用“predict_proba”,但它给出了一个错误。
蟒蛇代码
data_train = pd.read_csv('data.csv')
features = data_train.columns[:-1]
labels = data_train.columns[-1]
x_features = data_train[features]
x_label = data_train[labels]
X_train, X_test, y_train, y_test = train_test_split(x_features, x_label, random_state=0)
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
clf = DecisionTreeClassifier(max_depth=3).fit(X_train, y_train)
class_probabilitiesDec = clf.predict_proba(y_train)
#ERORR: ValueError: Number of features of the model must match the input. Model n_features is 10 and input n_features is 16722
print('Decision Tree …Run Code Online (Sandbox Code Playgroud) python classification machine-learning scikit-learn data-science
我有 2 个类的数据集,我必须对其执行二进制分类。我选择随机森林作为分类器,因为它在其他模型中给了我最好的准确性。数据集 1 中的数据点数为 462,数据集 2 包含 735 个数据点。我注意到我的数据有轻微的类不平衡,所以我尝试优化我的训练模型并通过提供类权重来重新训练我的模型。我提供了以下类权重值。
cwt <- c(0.385,0.614) # Class weights
ss <- c(300,300) # Sample size
Run Code Online (Sandbox Code Playgroud)
我使用以下代码训练了模型
tr_forest <- randomForest(output ~., data = train,
ntree=nt, mtry=mt,importance=TRUE, proximity=TRUE,
maxnodes=mn,sampsize=ss,classwt=cwt,
keep.forest=TRUE,oob.prox=TRUE,oob.times= oobt,
replace=TRUE,nodesize=ns, do.trace=1
)
Run Code Online (Sandbox Code Playgroud)
使用选定的类权重提高了我的模型的准确性,但我仍然怀疑我的方法是正确的还是只是巧合。我如何确保我选择的班级体重是完美的?
我使用以下公式计算了班级权重:
正类的类权重 =(数据集 1 中的数据点数)/(总数据点)
负类的类权重 =(数据集 2 中的数据点数)/(总数据点))
Run Code Online (Sandbox Code Playgroud)For dataset-1 462/1197 = 0.385 For dataset-2 735/1197 = 0.614
这是一种可以接受的方法,如果不是为什么它可以提高我的模型的准确性。请帮助我理解类权重的细微差别。
我正在尝试构建图像分类模型。这是一个 4 类图像分类。这是我用于构建图像生成器和运行训练的代码:
train_datagen = ImageDataGenerator(rescale=1./255.,
rotation_range=30,
horizontal_flip=True,
validation_split=0.1)
train_generator = image_gen.flow_from_directory(train_dir, target_size=(299, 299),
class_mode='categorical', batch_size=20,
subset='training')
validation_generator = image_gen.flow_from_directory(train_dir, target_size=(299, 299),
class_mode='categorical', batch_size=20,
subset='validation')
model.compile(Adam(learning_rate=0.001), loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit_generator(train_generator, steps_per_epoch=int(440/20), epochs=20,
validation_data=validation_generator,
validation_steps=int(42/20))
Run Code Online (Sandbox Code Playgroud)
我能够完美地进行训练和验证工作,因为训练目录中的图像存储在每个班级的单独文件夹中。但是,正如您在下面看到的,测试目录有 100 个图像,其中没有文件夹。它也没有任何标签,只包含图像文件。
如何使用 Keras对test文件夹中的图像文件进行预测?
标题中问题的答案可能非常明显,因为它通常被称为“ArcFace Loss”。
然而,有一部分让我感到困惑:
我正在阅读 Arcface 损失的以下 Keras 实现:
https://github.com/4uiiurz1/keras-arcface
在其中,请注意该model.compile行仍然指定loss='categorical_crossentropy'
此外,我看到很多来源将 Softmax 称为损失函数,我之前理解它是许多分类神经网络的输出层的激活函数。
基于这两点混淆,我目前的理解是损失函数,即网络如何实际计算代表给定示例的“错误程度”的数字,无论如何都是交叉熵。而 ArcFace 和 Softmax 一样,是输出层的激活函数。
这是正确的吗?如果是这样,为什么 Arcface 和 Softmax 被称为损失函数?如果没有,我的困惑可能来自哪里?
classification computer-vision deep-learning keras tensorflow
我想在每个包含 N 个训练点的批次上使用梯度下降训练神经网络。我希望这些批次只包含具有相同标签的点,而不是从训练集中随机采样。
例如,如果我使用 MNIST 进行训练,我希望有如下所示的批次:
batch_1 = {0,0,0,0,0,0,0,0}
batch_2 = {3,3,3,3,3,3,3,3}
batch_3 = {7,7,7,7,7,7,7,7}
Run Code Online (Sandbox Code Playgroud)
.....
等等。
我如何使用 pytorch 做到这一点?
classification ×10
keras ×4
python ×4
scikit-learn ×4
python-3.x ×2
tensorflow ×2
data-science ×1
pytorch ×1
r ×1
resnet ×1
weighted ×1