Настройка выходной переменной в глубоком обучении

#python #tensorflow #machine-learning #keras #deep-learning

#python #тензорный поток #машинное обучение #keras #глубокое обучение

Вопрос:

У меня есть этот код:

 from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',')
X = dataset[:,0:8]
y = dataset[:,8]
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=150, batch_size=10)
_, accuracy = model.evaluate(X, y)
print('Accuracy: %.2f' % (accuracy*100))
 

Мне нужно изменить выходной столбец, чтобы он предсказывал / учился на основе оценки (например, от 1 до миллиона) вместо 0 или 1 (сигмоид).

Комментарии:

1. Кажется, вы пытаетесь выполнить регрессию, а не классификацию. Используйте model.add(Dense(1)) , без активации, поэтому это будет линейный слой. Также измените потерю на mse from binary_crossentropy

2. @epsi95 спасибо за это, дополнительный вопрос, вы знаете, как заставить его принимать различное количество столбцов в качестве входных данных? скажем, от 4 до 5? прямо сейчас все мои столбцы имеют размер 8, и мне приходится заполнять его, но я беспокоюсь, что это помешает обучению.

3. Пожалуйста, не используйте пространство комментариев для последующих вопросов. Либо отредактируйте и обновите свой пост, либо откройте новый.

Ответ №1:

Что касается вашего случая, вам нужно использовать relu в качестве функции активации на последнем уровне (выходной уровень) вместо sigmoid Диапазон relu равен [0, inf).Тогда в этом случае вам нужно использовать ‘MSE’ в качестве показателя потерь.

Концептуально проблема, которую вы пытаетесь решить, является проблемой регрессионного типа.