Небольшое дополнение: если вы сохраняете модель (с добавлением пользовательского объекта) и загружаете модель только для вывода, вам больше не нужна эта функция. Просто используйте другую функцию потери keras: custom_objects = {"weighted_loss": some_other_loss_function}. Это не имеет значения, потому что вы все равно не будете его использовать. Поэтому вам не нужно копировать код для функции потерь в вашем коде вывода.

орое время я застрял в классификации по нескольким меткам (я должен сказать, что я новичок в нейронной сети). Сначала я объясню сеть, которую я пытаюсь обучить. У меня есть 1000 классов в сети, и они имеют выходы с несколькими метками. Для каждого примера обучения количество положительных результатов одинаково (т. Е. 10), но они могут быть назначены любому из 1000 классов. Таким образом, 10 классов имеют выход 1, а остальные 990 имеют выход 0. Для классификации по нескольким меткам я использую «бинарную перекрестную энтропию» в качестве функции стоимости и «сигмоид» в качестве функции активации. Когда я попробовал это правило 0.5 в качестве отсечения для 1 или 0. Все они были 0. Я понимаю, что это проблема дисбаланса класса. Из этогоссылкаЯ понимаю, что мне, возможно, придется создавать дополнительные выходные метки. К сожалению, я не смог понять, как включить это в простую нейронную сеть в кератах.

nclasses = 1000

# if we wanted to maximize an imbalance problem!
#class_weight = {k: len(Y_train)/(nclasses*(Y_train==k).sum()) for k in range(nclasses)}

#print(class_weight)
# building neural network model
inp = Input(shape=[X_train.shape[1]])
x = Dense(5000, activation='relu')(inp)

x = Dense(4000, activation='relu')(x)

x = Dense(3000, activation='relu')(x)
x = Dense(2000, activation='relu')(x)
x = Dense(nclasses, activation='sigmoid')(x)
model = Model(inputs=[inp], outputs=[x])
print(model.summary())

adam=keras.optimizers.adam(lr=0.00001)
model.compile('adam', 'binary_crossentropy')
history = model.fit(
    X_train, Y_train, batch_size=32, epochs=50,verbose=0,shuffle=False)

plt.plot(history.history['loss'])
#plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

model.save('model2.h5')

Может ли кто-нибудь помочь мне с кодом здесь, и я также был бы очень признателен, если бы вы могли предложить хороший показатель «точности» для этой проблемы?

Большое спасибо :) :)

Ответы на вопрос(1)

Ваш ответ на вопрос