LoginSignup
1
1

More than 3 years have passed since last update.

TensorFlowの公式チュートリアルを見て、あまり丁寧でないと思ったのでKaggle Titanicを題材にTensorFlowの使い方を解説する。
とはいえ僕もまだまだTensorFlowに対する理解が浅いので初歩的な範囲で。

コード解説

実際にTitanicコンペのために組んだコード(https://www.kaggle.com/yusukemigitera/tf-first )を解説する。

インポート、データ整形

ほぼ前回(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個のニューラルネットワークを定義している。

分類問題は出力層に分類の数と同じノードを用意するものだが、ここは公式チュートリアルの書き方に従った。2値分類はまた特殊なのかもしれない。

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'))

推論の実行も1行で書ける。

データを整形してCSVに出力

前回と同じ。

評価

スクリーンショット 2020-06-01 15.02.27.png
スコアは前回と比べて1%だけ高くなった。まだだいぶ低いが、今回は特に最適化を考えていなかったので仕方ない。
Numpyオンリーで書くよりよっぽど楽。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1