🚀 STEP 28: 独立プロジェクト
自分で選んだテーマでディープラーニングプロジェクトを完成させよう!
📋 このステップの目標
- 3つのプロジェクトから1つを選択
- これまで学んだ技術を総合的に活用
- 自分の力でモデルを構築・改善
- ポートフォリオとして活用できる成果物を作成
🎯 プロジェクトを選ぼう
以下の3つのプロジェクトから、興味のあるものを1つ選んで取り組んでください。
各プロジェクトで使用する技術と難易度が異なります。
🎨 プロジェクトA: Fashion-MNIST 画像分類
CNN 入門
Tシャツ、ズボン、靴など10種類のファッションアイテムを画像から分類します。
MNISTの発展版で、CNNの実践的な活用を学べます。
- データ:Fashion-MNIST(60,000枚訓練、10,000枚テスト)
- 目標精度:92%以上
- 使用技術:CNN、データ拡張、Batch Normalization
- 推奨時間:60〜90分
📈 プロジェクトB: 株価予測(時系列予測)
RNN/LSTM 中級
過去の株価データから将来の価格を予測するモデルを構築します。
LSTMを使った時系列予測の実践的なスキルが身につきます。
- データ:Yahoo Finance API または CSV
- 目標:翌日の株価方向(上昇/下降)を60%以上の精度で予測
- 使用技術:LSTM/GRU、シーケンス処理、正規化
- 推奨時間:90〜120分
✍️ プロジェクトC: 手書き文字認識(日本語ひらがな)
CNN 上級
日本語のひらがな手書き文字を認識するモデルを構築します。
46クラス分類という複雑なタスクに挑戦します。
- データ:Kuzushiji-49 または ETL9
- 目標精度:85%以上
- 使用技術:CNN、転移学習、データ拡張
- 推奨時間:90〜120分
🎨 プロジェクトA: Fashion-MNIST 詳細
A-1. データセットの準備
import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist
import numpy as np
import matplotlib.pyplot as plt
# データの読み込み
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()
# クラス名
class_names = [‘Tシャツ’, ‘ズボン’, ‘セーター’, ‘ドレス’, ‘コート’,
‘サンダル’, ‘シャツ’, ‘スニーカー’, ‘バッグ’, ‘ブーツ’]
# データの確認
print(f”訓練データ: {X_train.shape}”)
print(f”テストデータ: {X_test.shape}”)
# サンプル画像の表示
fig, axes = plt.subplots(2, 5, figsize=(12, 5))
for i, ax in enumerate(axes.flat):
ax.imshow(X_train[i], cmap=’gray’)
ax.set_title(class_names[y_train[i]])
ax.axis(‘off’)
plt.tight_layout()
plt.show()
A-2. 要件
📌 必須要件
- CNNモデルを構築する(Conv2D、MaxPooling2Dを使用)
- 92%以上のテスト精度を達成する
- 学習曲線を可視化する
- 混同行列を作成し、誤分類されやすいクラスを特定する
💡 ヒント
- データを(28, 28, 1)の形状にreshapeする
- Batch Normalizationを追加すると学習が安定する
- Dropoutで過学習を防ぐ
- データ拡張(回転、シフト)も効果的
A-3. スターターコード
# 前処理
X_train = X_train.reshape(-1, 28, 28, 1).astype(‘float32’) / 255.0
X_test = X_test.reshape(-1, 28, 28, 1).astype(‘float32′) / 255.0
# One-hotエンコーディング
from tensorflow.keras.utils import to_categorical
y_train_cat = to_categorical(y_train, 10)
y_test_cat = to_categorical(y_test, 10)
# TODO: ここにCNNモデルを構築
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization
model = Sequential([
# あなたのコードをここに追加
])
# コンパイルと学習
model.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])
# TODO: 学習を実行し、92%以上を目指す
📈 プロジェクトB: 株価予測 詳細
B-1. データセットの準備
# yfinanceのインストール(Google Colabで実行)
!pip install yfinance -q
import yfinance as yf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 株価データの取得(例:Apple)
ticker = “AAPL”
data = yf.download(ticker, start=”2020-01-01″, end=”2024-01-01″)
# 終値を使用
prices = data[‘Close’].values
print(f”データ数: {len(prices)}”)
print(f”期間: {data.index[0]} 〜 {data.index[-1]}”)
# プロット
plt.figure(figsize=(12, 4))
plt.plot(data.index, prices)
plt.title(f'{ticker} 株価推移’)
plt.xlabel(‘日付’)
plt.ylabel(‘価格 ($)’)
plt.show()
B-2. 要件
📌 必須要件
- LSTM または GRU モデルを構築する
- 過去N日間のデータから翌日を予測
- 予測値と実際の値をプロットして比較
- RMSE(Root Mean Square Error)を計算
💡 ヒント
- MinMaxScalerで0-1に正規化する
- シーケンス長は30〜60日が目安
- Dropoutで過学習を防ぐ
- 予測後は逆スケーリングを忘れずに
B-3. スターターコード
from sklearn.preprocessing import MinMaxScaler
# 正規化
scaler = MinMaxScaler()
prices_scaled = scaler.fit_transform(prices.reshape(-1, 1))
# シーケンスデータの作成
def create_sequences(data, seq_length):
X, y = [], []
for i in range(len(data) – seq_length):
X.append(data[i:i+seq_length])
y.append(data[i+seq_length])
return np.array(X), np.array(y)
SEQ_LENGTH = 60
X, y = create_sequences(prices_scaled, SEQ_LENGTH)
# 訓練/テスト分割(時系列なのでシャッフルしない)
split = int(len(X) * 0.8)
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
print(f”X_train: {X_train.shape}, y_train: {y_train.shape}”)
# TODO: LSTMモデルを構築
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
model = Sequential([
# あなたのコードをここに追加
])
# TODO: 学習を実行し、予測結果を可視化
✍️ プロジェクトC: ひらがな認識 詳細
C-1. データセットの準備
# Kuzushiji-49データセット
import tensorflow as tf
import numpy as np
# データのダウンロード
!wget -q http://codh.rois.ac.jp/kmnist/dataset/k49/k49-train-imgs.npz
!wget -q http://codh.rois.ac.jp/kmnist/dataset/k49/k49-train-labels.npz
!wget -q http://codh.rois.ac.jp/kmnist/dataset/k49/k49-test-imgs.npz
!wget -q http://codh.rois.ac.jp/kmnist/dataset/k49/k49-test-labels.npz
# データの読み込み
X_train = np.load(‘k49-train-imgs.npz’)[‘arr_0’]
y_train = np.load(‘k49-train-labels.npz’)[‘arr_0’]
X_test = np.load(‘k49-test-imgs.npz’)[‘arr_0’]
y_test = np.load(‘k49-test-labels.npz’)[‘arr_0’]
print(f”訓練データ: {X_train.shape}”)
print(f”テストデータ: {X_test.shape}”)
print(f”クラス数: {len(np.unique(y_train))}”)
C-2. 要件
📌 必須要件
- CNNモデルを構築する(または転移学習を使用)
- 85%以上のテスト精度を達成する
- データ拡張を適用する
- 混同行列で誤分類パターンを分析
💡 ヒント
- 49クラスあるため、より深いネットワークが必要
- 転移学習(MobileNetV2)を使う場合は画像を拡大
- Learning Rate Schedulerで学習率を調整
- 類似した文字(あ/お、は/ほ等)の混同に注目
📋 評価基準
| 項目 | 配点 | 内容 |
|---|---|---|
| モデル構築 | 30点 | 適切なアーキテクチャの選択と実装 |
| 目標精度達成 | 25点 | プロジェクトごとの目標精度をクリア |
| 可視化 | 20点 | 学習曲線、混同行列、予測結果のプロット |
| コードの品質 | 15点 | コメント、構造化、再現性 |
| 分析・考察 | 10点 | 結果の解釈、改善点の提案 |
📤 提出方法
📌 提出手順
- Google Colabでプロジェクトを完成させる
- 全てのセルを上から順に実行し、エラーがないことを確認
- ノートブックを保存(Ctrl+S または ファイル→保存)
- 共有設定を「リンクを知っている全員が閲覧可能」に変更
- 共有リンクをコピーして提出
⚠️ 提出前チェックリスト
- 全てのセルがエラーなく実行できる
- 目標精度を達成している
- 学習曲線がプロットされている
- 混同行列(または予測結果)が表示されている
- コードにコメントが付いている
- 結果に対する考察が書かれている
🎉 おめでとうございます!
ディープラーニング基礎コース(全28ステップ)を完了しました!
このコースで習得したスキル:
ニューラルネットワーク / CNN / RNN / LSTM / GRU / Attention
転移学習 / データ拡張 / ハイパーパラメータチューニング
✅ 次のステップ
- 自然言語処理(NLP)コース:Transformer、BERT、GPTを学ぶ
- コンピュータビジョンコース:物体検出、セグメンテーションを学ぶ
- Kaggleコンペ:実際のデータサイエンスコンペに挑戦
- ポートフォリオ作成:GitHubでプロジェクトを公開
💡 学習を続けるためのアドバイス
- 毎日少しずつ:週5時間より毎日30分の方が効果的
- 手を動かす:読むだけでなく必ずコードを書く
- アウトプット:学んだことをブログやSNSで発信
- コミュニティ:勉強会やオンラインコミュニティに参加
学習メモ
ディープラーニング基礎 - Step 28
📋 過去のメモ一覧
▼