#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
frombinary_crossentropy
2. @epsi95 спасибо за это, дополнительный вопрос, вы знаете, как заставить его принимать различное количество столбцов в качестве входных данных? скажем, от 4 до 5? прямо сейчас все мои столбцы имеют размер 8, и мне приходится заполнять его, но я беспокоюсь, что это помешает обучению.
3. Пожалуйста, не используйте пространство комментариев для последующих вопросов. Либо отредактируйте и обновите свой пост, либо откройте новый.
Ответ №1:
Что касается вашего случая, вам нужно использовать relu в качестве функции активации на последнем уровне (выходной уровень) вместо sigmoid Диапазон relu равен [0, inf).Тогда в этом случае вам нужно использовать ‘MSE’ в качестве показателя потерь.
Концептуально проблема, которую вы пытаетесь решить, является проблемой регрессионного типа.