Определить количество узлов и слоев на основе формы данных - PullRequest
0 голосов
/ 28 марта 2020

Есть ли способ определить количество узлов и скрытых слоев на основе формы данных? Кроме того, есть ли способ определить лучшую функцию активации на основе топи c?

Например, я делаю модель для предсказания поддельных новостей. Мои функции: количество слов в тексте, количество слов в заголовке, количество вопросов, количество заглавных букв и т. Д. c. Мой набор данных имеет 22 объекта и около 35000 строк. Мой вывод должен быть 0 или 1.

Исходя из этого, сколько слоев и узлов я должен использовать и какие функции активации лучше всего подходят для этого?

Это мой net:

model = Sequential()
model.add(Dense(100, input_dim = features.shape[1], activation = 'relu')) # input layer requires input_dim param
model.add(Dense(100, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dropout(0.1))
model.add(Dense(1, activation='sigmoid')) # sigmoid instead of relu for final probability between 0 and 1

sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss="mean_squared_error", optimizer=sgd, metrics=['accuracy'])


# call the function to fit to the data training the network)
model.fit(x_train, y_train, epochs = 10, shuffle = True, batch_size=32, validation_data=(x_test, y_test), verbose=1)


scores = model.evaluate(features, results)
print(model.metrics_names[1],  scores[1]*100)

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Выбор этих требует предварительного опыта, в противном случае нам не понадобится столько инженеров ML, которые пробуют разные архитектуры и пишут документы.

Но для начала я бы порекомендовал вам взглянуть на autokeras. помочь с вашей проблемой, так как это своего рода известная проблема - текстовая классификация, вам нужно только структурировать свои данные в качестве входных данных (X и Y) и затем передать их в их классификатор текста, который будет пытаться использовать различные модели (вы можете указать это) для выберите наиболее подходящий вариант для вашего случая.

Другие примеры вы можете найти в документации здесь https://autokeras.com/tutorial/text_classification/

import autokeras as ak

# Initialize the text classifier.
clf = ak.TextClassifier(max_trials=10) # It tries 10 different models
# Feed the text classifier with training data.
clf.fit(x_train, y_train)
# Predict with the best model.
predicted_y = clf.predict(x_test)
# Evaluate the best model with testing data.
print(clf.evaluate(x_test, y_test))
0 голосов
/ 28 марта 2020

Ответ нет и нет .

Ну, это тоже гиперпараметры. Вы можете выбрать их несколько и попробовать все, чтобы получить общее представление о том, какой из них дает наилучший результат. Да, то же самое относится и к функции активации.

Вы можете использовать больше слоев, чем вам нужно, а затем использовать регуляризацию, чтобы прекратить производство переопределенной модели. Также, если оно меньше, вы можете четко понять поведение подгонки по кривой потерь, дающей высокую погрешность тренировки.

Нет формулы для определения всех этих факторов. Вы должны попробовать разные вещи, основанные на проблеме, и вы увидите, что некоторые из них будут работать лучше, чем другие.

Для выходного слоя softmax будет хорошо, так как это даст вам вероятность предсказаний, которые вы можно легко преобразовать в одну горячую кодировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...