TensorFlow에서 Kaggle Titanic 풀기

TensorFlow의 공식 튜토리얼을 보고, 그다지 정중하지 않다고 생각했기 때문에 Kaggle Titanic을 소재에 TensorFlow의 사용법을 해설한다.
그렇다고는 해도 나도 아직 TensorFlow에 대한 이해가 얕기 때문에 초보적인 범위에서.

코드 해설



실제로 Titanic 대회를 위해 만든 코드 (htps //w w. 꺄gぇ. 코 m / 유스케 미기 테라 / tf fu rst)를 설명합니다.

가져오기, 데이터 성형



거의 전회(2층 신경망으로 Kaggle Titanic 풀기 )와 같다.

사용할 데이터 항목 선택



이번에는 Pclass(티켓 클래스), Sex(성별), Age(연령), SibSp(형제/배우자 수) Fare(요금)의 5개 항목을 이용했지만, 행렬에서 필요한 부분을 잘라내는 방법을 모른다 그래서 일렬씩 삭제해 갔다.
train_target = train.pop('Survived')
train.pop('PassengerId')
train.pop('Name')
train.pop('Parch')
train.pop('Ticket')
train.pop('Cabin')
train.pop('Embarked')

train_array = np.asarray(train.values) #Numpy配列にする
target_array = np.asarray(train_target.values) #Numpy配列にする

dataset = tf.data.Dataset.from_tensor_slices((train_array.astype('float32'), target_array))
# TensorFlowで扱いやすい形の変数におく

또한 np.asarray() 또는 .astype('float32')에서 데이터 유형을 지정하지 않으면 잘 모르는 오류가 발생합니다.

모델 정의, 학습


model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
tf.keras.Sequential라는 클래스의 인스턴스를 만듭니다. 인수에 넣은 배열의 요소tf.keras.layers.Dense()가 신경망의 층을 나타낸다. Dense는 전체 결합의 계층이며 (노드 수, 활성화 함수)를 인수로 지정합니다.

입력층은 이것에 포함하지 않고, 위에서 중간층 2개의 노드가 10개씩, 출력층의 노드가 1개의 뉴럴 네트워크를 정의하고 있다.

분류 문제는 출력층에 분류의 수와 같은 노드를 준비하는 것이지만, 여기는 공식 튜토리얼 의 작성 방법에 따랐다. 이진 분류는 또한 특별한 것일지도 모른다.
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

model.fit(train_array.astype('float32'), target_array, epochs=15)
compile 메서드에서 최적화 프로그램, 손실 함수 및 메트릭을 설정합니다. tf.keras.Sequential 의 메소드에 대해서는 Keras Documentation 를 보면 참고가 된다.

학습의 실행은 fit 메소드의 1행으로 쓸 수 있다. 이 측면은 프레임 워크의 편리함을 알 수 있습니다.

추론


y = model.predict(test_array.astype('float32'))

추론의 실행도 한 줄로 쓸 수 있다.

데이터를 성형하고 CSV로 출력



전회와 같다.

평가




스코어는 전회에 비해 1%만 높아졌다. 아직도 낮지만 이번에는 특히 최적화를 생각하지 않았기 때문에 어쩔 수 없다.
Numpy 온리로 쓰는 것보다 훨씬 편합니다.

좋은 웹페이지 즐겨찾기