ディープラーニング入門_2025

ディープラーニング入門

Pythonの主な特徴

  • インデント(字下げ)によってブロックを定義するため、コードが見やすい。
  • 外部ライブラリをpipコマンドで簡単にインストール可能。
  • 動的型付け言語。変数の型を明示的に宣言する必要がなく、コードが柔軟。
  • インタープリタ言語。一行ずつ実行される。

Python 2系と3系について

今回の勉強会の内容であれば、ターミナルを開かなくてもできるのだけど、知っておいたほうが良いので一応やります。

Windowsの人

Windowsの人は仮想Linux環境をインストールしておくと後々良いので、まずターミナル(管理者)を開いて

下記のコマンドを入力してEnterを押してください。PCを再起動するようにメッセージが出ると思うので、再起動してください。

wsl --install

再起動したらスタートメニューに「Ubuntu」というのが入っていると思うので、それを実行する。

Ubuntuのターミナルが開いたら、下記を入力してpipとIPythonをインストールしておく。

sudo apt update #リポジトリの更新
sudo apt install python3-pip #pipのインストール
sudo apt install ipython3 #ipython3のインストール

Macの人

Linuxのコマンドを簡単にインストールできるHomebrewをインストールしておく。Launchpadを開いて、「その他」→「ターミナル」を開いて

下記のコマンドを入力してEnterを押してください。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

homebrewのインストールが終わったら、下記を入力してIPythonをインストールしておく。

brew install ipython
ls #フォルダ(ディレクトリ)の中にあるファイルを表示する
pwd #今いるディレクトリがどこかを表示する
cd / #一番上(ルートフォルダ)に移動する

https://qiita.com/5t111111/items/7852e13ace6de288042f

  • 強力な補完機能
  • Pythonの言語としては使えない便利な機能が実装されている。例えば先頭に「!」を付けるとシェルのコマンドを実行可能だったり、変数の最後に「?」を付けると型名などを教えてくれたり。

https://freelance.shiftinc.jp/column/ipython

ブラウザ上でNotebookにプログラムを打ち込み、実行する。もしくは、データなどの保存や共有をするためのツール。サーバとしてのIPythonは別に動いていて(カーネルと呼ぶ)、ウェブブラウザからサーバのIPythonにスクリプトを実行してもらっている。

Jupyter Notebook をベースに Google が独自進化させた環境です。Google アカウントがあれば、自身の PC に Python をインストールしなくてもブラウザから直ぐに利用可能です。GPU付きのサーバ上で動いているカーネルを無料で使わせてもらえる。ただし、無料版ゆえに数時間で接続が切れる。コードを入力したら「Shift+Enter」で実行する。

https://colab.research.google.com/

東京大学における「Pythonプログラミング入門」の教材

https://utokyo-ipp.github.io/

1.以下の結果はどうなるでしょうか?

val1=1+1
val2=1+"1"
val3="1"+"1"

計算が終わった後の変数の中身を確認し、変数の型を確認すること。

2.valの値はプラスかマイナスの数字が入っているとします。この時、valの中身を絶対値にする(マイナスの場合はプラスに変換する)if文を書いてください。

関数、配列、for文、ファイル読み取り

Google Colab https://colab.research.google.com/

def myfunction(x, y):
    return x + y

https://utokyo-ipp.github.io/1/1-2.html#%E9%96%A2%E6%95%B0%E3%81%AE%E5%AE%9A%E7%BE%A9%E3%81%A8%E8%BF%94%E5%80%A4

  • returnは関数の戻り値を指定する
  • 関数内部で定義した変数は関数内部でしか使用できない(ローカル変数)
  • 逆に関数の外で定義した変数(グローバル変数)にはアクセス可能

引数に5を足す関数plus5を定義し、引数に3を与えて呼び出してみる。

名前:大谷翔平、生年月日:1994年7月5日、出身地:岩手県水沢市 というデータを適切なデータ構造に保存せよ。

https://techplay.jp/column/1703

fruits = ['apple', 'banana', 'orange']

for fruit in fruits:
    print(fruit)

Pythonのfor文は、入れた順番のとおりに取り出される。

Google Colabのサーバにファイルをアップロード

Pythonのファイル読み取り

1.下記のファイルは2024年度の学生実験で得られたナノポアのシーケンスデータ(FASTQファイル)です。これをGoogle Colabにアップロードし、ファイルを読み取り、リード数を調べてみる。(リード数=行数/4) read()で読み込んだ文字列を改行で分割してリストにするにはsplit("\n")を使う。Macの人は「\」を入力するにはAlt+「\(¥)」を押す。

https://suikou.fs.a.u-tokyo.ac.jp/yosh_data/2024jissyu/fastq/3-eDNA.fq

2.FASTQファイルは4行で1リードの情報が書かれていて、2行目に塩基配列の情報が記載されています。塩基配列の長さの合計値を記録し、最後にリード数で割って平均リード長を求めてください。ヒント:10割る3の余りは1ですよね。そのように余りを求める演算子は「%」で、「10 % 3」の結果は「1」です。文字列の長さはlen(“文字列”)で取得可能です。平均リード長=合計リード長/リード数

クラス、インスタンス、モジュール、Colabのランタイム変更、手書き数字の認識

Google Colabで「手書き文字を認識するプログラムを書いて」と入力してAIにコードを生成してもらいましょう。

A) `'Hello.\n'` ではなくて、「ようこそ"引数"」と出力するaisatsuメソッドを作ってください。
B)「初期化時に指定された文字列+何回呼び出されたか」を文字列で返す aisatsu メソッドを持つ新しいクラス SayCount を定義してください。ヒント:数字から文字列への変換はstr(数字)で行います。

先ほどのSayCountクラスをsay.pyファイルとして保存して、Google Colabにアップロードし、自作sayモジュールをimportで読み込んで、適当な引数で初期化して使ってみる。

# prompt: 手書き文字を認識するプログラムを書いて

!pip install tensorflow
!pip install keras
!pip install pillow

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from PIL import Image
import numpy as np

# MNISTデータセットをロード
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# データの前処理
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, num_classes=10)
y_test = keras.utils.to_categorical(y_test, num_classes=10)

# モデルの構築
model = keras.Sequential([
    layers.Flatten(input_shape=(28, 28)),
    layers.Dense(128, activation='relu'),
    layers.Dense(10, activation='softmax')
])

# モデルのコンパイル
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# モデルの学習
model.fit(x_train, y_train, epochs=5)

# モデルの評価
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

# 手書き文字の認識
def recognize_handwritten_digit(image_path):
  img = Image.open(image_path).convert('L').resize((28, 28))
  img_array = np.array(img)
  img_array = img_array.astype('float32') / 255.0
  img_array = np.expand_dims(img_array, axis=0)
  prediction = model.predict(img_array)
  digit = np.argmax(prediction)
  return digit

# 手書き文字画像のパスを指定して認識
image_path = 'path/to/your/handwritten_digit.png'  # 手書き文字画像のパスに置き換えてください
recognized_digit = recognize_handwritten_digit(image_path)
print('Recognized digit:', recognized_digit)

Mac用のペイントソフト: Paintbrush

手書き文字は黒字に白文字で書くこと!

CNNを利用して手書き文字を認識するプログラムを作る。いくつか手書き文字を作成し、実際の正答率を調べてみる。

  • ディープラーニング入門_2025.txt
  • 最終更新: 2025/03/24 07:23
  • by suikou