의 가능성을 예측하기 위해, 다음과 같은 사실이다 : 나는 각각에 속하는 입력 확률을 예측하기 위해 노력하고있어구조는 여러 개의 독립적 인 클래스 내가 해결하고있어 문제
- 12 개 수업.
- 입력이 12 클래스 중 하나에 속하지 않을 수도 있습니다. 즉, 12 개의 출력 (확률)이 모두 낮을 수 있습니다.
- 출력 확률은 독립적이어야합니다. 즉, 클래스 1의 확률이 95 %라면 클래스 2의 확률은> 5 % 등이 될 수 있습니다. 즉, 일부 클래스가 유사하기 때문에 전체 확률을 최대 1로 더 할 필요가 없습니다. 실제로, 각 입력은 오직 하나의 클래스에만 속할 수 있습니다. 제가 말하는 것은 확률입니다.
- 하나 뜨거운 인코딩 12 출력 클래스
- 손실 기능 : 범주 crossentropy
- 최종 층 : 12 개 뉴런에 고밀도 다음과 같이
나는 현재이 접근하고있어 방법은 시그 모이 드 활성화
질문
- 이 12 개 클래스 각각의 멤버십을 예측하는 모델이 1 개있는 것이 합리적입니까? 아니면 각각 하나의 클래스에 대한 확률을 예측하는 독립 모델을 갖는 것이 더 합리적입니까? 뭐가 더 나은가요?
- 12 개 대신 13 개 클래스를 갖는 것이 더 낫습니다. 새로운 클래스는 입력이 어떤 클래스에도 속하지 않는다는 것을 나타냅니다.
코드
test_fraction = 0.2
dropout_prob = 0.4
activation_function = 'relu'
loss_function = 'categorical_crossentropy'
opt = Adam()
verbose_level = 1
num_targets = 12
batch_size = 32
epochs = 75
X = np.array(keypoints)
labels = np.array(labels)
labels = np_utils.to_categorical(labels)
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=test_fraction, random_state=42)
# model training
model = Sequential()
model.add(Dense(32, input_shape=(180,)))
model.add(Dense(64, activation=activation_function))
model.add(Dense(128, activation=activation_function))
model.add(Dense(num_targets, activation='sigmoid'))
model.summary()
model.compile(loss=loss_function, optimizer=opt, metrics=['accuracy'])
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=verbose_level,
validation_data=(X_test, y_test))
model.save('../models/model.h5')
각 입력이 하나의 클래스에만 속할 수있는 경우 확률이 1보다 커질 수있는 방법을 이해하지 못합니다. 실제적으로 모델의 출력을 다음과 같이 변환하는 데 사용할 메소드는 무엇입니까? 확률? 어쨌든 입력이 여러 클래스에 속할 수 없다면 한 모델이 나에게 가장 좋은 것 같습니다. 제 생각에는 '수업 없음'을 다루는 13 개의 수업이 있어야한다고 생각합니다. 그러나 모든 교육 인스턴스가 수업에 속한 경우 어떻게하면 13 번째 경우에 대비할 것입니까? – Stephen