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

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ディープラーニング入門_2025 [2025/03/18 06:49] – [for文] suikouディープラーニング入門_2025 [2025/03/24 07:23] (現在) – [練習問題3-1] suikou
行 137: 行 137:
 - returnは関数の戻り値を指定する - returnは関数の戻り値を指定する
 - 関数内部で定義した変数は関数内部でしか使用できない(ローカル変数) - 関数内部で定義した変数は関数内部でしか使用できない(ローカル変数)
-- 逆に関数の外で定義した変数(グローバル変数)にも初期状態ではアクセスできない +- 逆に関数の外で定義した変数(グローバル変数)にはアクセス可能
  
 ### 練習問題 2-1 ### 練習問題 2-1
  
-引数の絶対値す関数absを定義してみる+引数に5す関数plus5を定義し、引数に3を与えて呼び出してみる
  
 ### 配列 ### 配列
行 184: 行 183:
  
 [[https://utokyo-ipp.github.io/4/4-1.html#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%85%A8%E4%BD%93%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF]] [[https://utokyo-ipp.github.io/4/4-1.html#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%85%A8%E4%BD%93%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF]]
- 
 ### 練習問題 2-3 ### 練習問題 2-3
  
-1.下記のファイルは2024年度の学生実験で得られたナノポアのシーケンスデータ(FASTQファイル)です。これをGoogle Colabにアップロードし、ファイルを読み取り、リード数を調べてみる。(リード数=行数/4)+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]] [[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」です。+2.FASTQファイルは4行で1リードの情報が書かれていて、2行目に塩基配列の情報が記載されています。塩基配列の長さの合計値を記録し、最後にリード数で割って平均リード長を求めてください。ヒント:10割る3の余りは1ですよね。そのように余りを求める演算子は「%」で、「10 % 3」の結果は「1」です。文字列の長さはlen("文字列")で取得可能です。平均リード長=合計リード長/リード数
  
 {{:pasted:20201026-181800.png}} {{:pasted:20201026-181800.png}}
行 198: 行 196:
  
 クラス、インスタンス、モジュール、Colabのランタイム変更、手書き数字の認識 クラス、インスタンス、モジュール、Colabのランタイム変更、手書き数字の認識
 +
 +[[https://colab.research.google.com/|Google Colab]]で「手書き文字を認識するプログラムを書いて」と入力してAIにコードを生成してもらいましょう。
 +
 +### コメント
 +
 +[[https://utokyo-ipp.github.io/1/1-1.html#%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88]]
 +
 +### 関数のデフォルト値
 +
 +[[https://www.javadrive.jp/python/userfunc/index5.html#google_vignette]]
  
 ### クラス、インスタンス ### クラス、インスタンス
  
-[[https://www.tohoho-web.com/python/class.html]]+[[https://utokyo-ipp.github.io/6/6-3.html]] 
 + 
 +### 練習問題3-1 
 + 
 +``` 
 +A) `'Hello.\n'` ではなくて、「ようこそ"引数"」と出力するaisatsuメソッドを作ってください。 
 +B)「初期化時に指定された文字列+何回呼び出されたか」を文字列で返す aisatsu メソッドを持つ新しいクラス SayCount を定義してください。ヒント:数字から文字列への変換はstr(数字)で行います。 
 +```
  
 ### モジュール ### モジュール
行 207: 行 222:
 [[https://qiita.com/niwaka_dev/items/6e3d9ff6d797243c77c3]] [[https://qiita.com/niwaka_dev/items/6e3d9ff6d797243c77c3]]
  
 +### 練習問題3-2
 +
 +先ほどの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)
 +```
 +
 +{{:pasted:20250320-165737.png}}
 +
 +Mac用のペイントソフト: [[https://paintbrush.sourceforge.io/downloads/|Paintbrush]]
 +
 +{{2.png}}
 +
 +手書き文字は黒字に白文字で書くこと!
 +
 +### Colabのランタイム変更
 +
 +[[https://qiita.com/skillup_ai/items/7fa5359330a6c572d7ce#3tensorflow%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95]]
 +
 +参考:T4のGPUカードのお値段
 +
 +{{:pasted:20250319-191452.png}}
 +
 +### 畳み込みニューラルネットワーク(CNN)
 +
 +動物の脳が光情報を処理するメカニズム [[https://ja.wikipedia.org/wiki/%E8%A6%96%E8%A6%9A%E9%87%8E]]
 +
 +CNNについて [[https://tech.nkhn37.net/tensorflow-keras-cnn-basic-mnist/]], [[https://ndk.co.jp/wp-content/uploads/2023/08/tp_20230810-2.pdf]]
 +
 +### 最終課題
 +
 +CNNを利用して手書き文字を認識するプログラムを作る。いくつか手書き文字を作成し、実際の正答率を調べてみる。
  
  • ディープラーニング入門_2025.1742280599.txt.gz
  • 最終更新: 2025/03/18 06:49
  • by suikou