<jupyter_start><jupyter_text>[View in Colaboratory](https://colab.research.google.com/github/DeepInsider/playground-data/blob/master/docs/articles/deeplearning1g1t_lesson07.ipynb)  Copyright 2018 Digital Advantage - Deep Insider.<jupyter_code>#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.<jupyter_output><empty_output><jupyter_text>「ディープラーニングを始めるための、Python基礎文法入門」のノートブック        Deep Insiderで記事を読む         Google Colabで実行する         GitHubでソースコードを見る   ※上から順に実行してください。上のコードで実行したものを再利用しているところがあるため、すべて実行しないとエラーになるコードがあります。  　すべてのコードを一括実行したい場合は、メニューバーから［ランタイム］－［すべてのセルを実行］をクリックしてください。 ※このノートブックは「Python 2」でも実行できるようにしていますが、基本的に「Python 3」を利用することをお勧めします。　Python 3を利用するには、メニューバーから［ランタイム］－［ランタイムのタイプを変更］を選択すると表示される［ノートブックの設定］ダイアログの、［ランタイムのタイプ］欄で「Python 3」に選択し、その右下にある［保存］ボタンをクリックしてください。  Python バージョン2への対応<jupyter_code># Pythonファイルの冒頭で以下を記述する
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

print(3 / 2) # 「1.5」。インポートしないPython 2系だと「1」<jupyter_output><empty_output><jupyter_text>ライブラリとパッケージ  リスト2　tensorflowパッケージをインストールするためのシェルコマンド<jupyter_code>!pip install tensorflow<jupyter_output><empty_output><jupyter_text>モジュールのインポート  リスト1　モジュールをインポートするコード例<jupyter_code>import tensorflow as tf<jupyter_output><empty_output><jupyter_text>モジュールの利用と定義  リスト3-1　モジュールを利用するコード例<jupyter_code>mnist = tf.keras.datasets.mnist<jupyter_output><empty_output><jupyter_text>リスト3-2　モジュール階層の途中のモジュールをインポートするコード例<jupyter_code>from tensorflow.keras import datasets
mnist = datasets.mnist<jupyter_output><empty_output><jupyter_text>コメント  リスト3-1　コメントのコード例（行全体）<jupyter_code># Display training progress by printing a single dot for each completed epoch（各エポックの完了のたびに「.」を描画することでトレーニングの進捗を表示する）
## ……コメントに続くコードは省略……

# Store training stats（トレーニング統計を保存する）
## ……コメントに続くコードは省略……<jupyter_output><empty_output><jupyter_text>リスト3-2　コメントのコード例（行途中）<jupyter_code>import tensorflow as tf  # tfという名前でtensorflowモジュールをインポート<jupyter_output><empty_output><jupyter_text>リスト3-3　コメントのコード例（複数行）<jupyter_code>'''
複数行の
コメントが
書けます
'''<jupyter_output><empty_output><jupyter_text>変数の宣言と代入  リスト4-1　【再掲】変数の宣言と代入のサンプルコード<jupyter_code>mnist = tf.keras.datasets.mnist<jupyter_output><empty_output><jupyter_text>リスト4-2　変数の内容の確認<jupyter_code>mnist<jupyter_output><empty_output><jupyter_text>データの型（基本編）  bool型（ブール型）  リスト5-1　変数の宣言と「真偽値」の代入を行うコード<jupyter_code>is_a = True
is_b = False

is_b  # Falseと出力される<jupyter_output><empty_output><jupyter_text>int型／float型（数値型）  リスト5-2　変数の宣言と「整数値」の代入を行うコード<jupyter_code>EPOCHS = 500

EPOCHS  # 500と出力される<jupyter_output><empty_output><jupyter_text>リスト5-3　変数の宣言と「浮動小数点数値」の代入を行うコード<jupyter_code>float_variable = 123.456

float_variable  # 123.456と出力される<jupyter_output><empty_output><jupyter_text>str型（文字列型）  リスト5-4　変数の宣言と「文字列」の代入を行うコード<jupyter_code>color = 'blue'

color  # 'blue'と出力される<jupyter_output><empty_output><jupyter_text>リスト5-5　二重引用符による文字列の記述<jupyter_code>color = "b'lue"

color  # "b'lue"と出力される<jupyter_output><empty_output><jupyter_text>リスト5-6　文字列でエスケープシーケンスを使った例<jupyter_code>color = 'b\'l"ue'

color  # 'b\'l"ue'と出力される
# 1つの変数に代入できる
tuple_data = ('Taro', 'Yamada')

# 個別の変数に分けて代入することもできる
(first_name, family_name) = ('Taro', 'Yamada')
# もちろんタプル型変数からも同様に分けて代入できる
(first_name, family_name) = tuple_data

# 丸カッコは省略することもできる
first_name, family_name = 'Taro', 'Yamada'<jupyter_output><empty_output><jupyter_text>データの型（コレクション編）  list型（リスト型）  リスト5-7　変数へ「リスト」値を代入するコード<jupyter_code>abc_list = ['a', 'b', 'c', 'd', 'e']

abc_list<jupyter_output><empty_output><jupyter_text>tuple型（タプル型）  リスト5-8　1つの変数へ「タプル」値を代入するコード<jupyter_code># 1つの変数に代入できる
tuple_data = ('Taro', 'Yamada')

tuple_data  # ('Taro', 'Yamada')と出力される<jupyter_output><empty_output><jupyter_text>リスト5-9　複数の変数へ「タプル」値を代入するコード<jupyter_code># タプル型変数の値を複数の変数に分けて代入できる
(first_name, family_name) = tuple_data

# タプルの宣言時に、個別の変数に分けて代入することもできる
(first_name, family_name) = ('Taro', 'Yamada')

family_name  # 'Yamada'と出力される<jupyter_output><empty_output><jupyter_text>リスト5-10　丸括弧を省略したタプルの例<jupyter_code>first_name, family_name = 'Taro', 'Yamada'

family_name  # 'Yamada'と出力される<jupyter_output><empty_output><jupyter_text>リスト5-11　タプルを応用して複数の変数をまとめて宣言＆代入する例<jupyter_code>is_b, EPOCHS, color = False, 500, 'blue'

is_b, EPOCHS, color  # '(False, 500, 'blue')'と出力される<jupyter_output><empty_output><jupyter_text>dict型（辞書型）  リスト5-13　変数への「辞書」の代入を行っているコード<jupyter_code>abc_dict = { 'a': 1.2, 'b': 2.4, 'c': 3.6 }

abc_dict  # { 'a': 1.2, 'b': 2.4, 'c': 3.6 }と出力される<jupyter_output><empty_output><jupyter_text>リスト5-14　辞書を使用するサンプルコード<jupyter_code>abc_dict['a']
# 1.2と出力される<jupyter_output><empty_output><jupyter_text>関数の利用  リスト16-1　関数を利用するコード例<jupyter_code>(x_train, y_train),(x_test, y_test) = mnist.load_data()<jupyter_output><empty_output><jupyter_text>リスト16-2　戻り値を無視するコード例<jupyter_code>mnist.load_data()
# 戻り値は出力（＝表示）されるのみで、変数に保存されない<jupyter_output><empty_output><jupyter_text>リスト16-3　変数内容の出力とprint()関数の出力の違い<jupyter_code>y_train  # array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)のように出力される
print(y_train)  # [5 0 4 ... 5 6 8]のように出力される<jupyter_output><empty_output><jupyter_text>関数の定義  リスト17-1　関数を定義するコード例<jupyter_code>import matplotlib.pyplot as plt  # 下記コードの実行に必要なライブラリを追記

def plot_image(i, predictions_array, true_label, img):
  # ……省略……

  plt.imshow(img, cmap=plt.cm.binary)
  # ……省略……<jupyter_output><empty_output><jupyter_text>制御構文  条件分岐  リスト18-1　条件分岐を行うコード例<jupyter_code>predicted_label = '猫'
true_label = '犬'  # この2行は下記コードの実行に必要な仮のコード

if predicted_label is true_label:
  color = 'blue'
else:
  color = 'red'

color<jupyter_output><empty_output><jupyter_text>リスト18-2　3つ以上の条件分岐を行うコード例<jupyter_code>predicted_label = '猫'  # この2行は下記コードの実行に必要な仮のコード

if predicted_label == '犬':
  color = 'blue'
elif predicted_label == '猫':
  color = 'green'
elif predicted_label == '馬':
  color = 'yellow'
else:
  color = 'red'

color  # 'green'と出力される<jupyter_output><empty_output><jupyter_text>リスト18-3　else文が含まれない条件分岐のコード例<jupyter_code>predicted_label = '猫'  # この2行は下記コードの実行に必要な仮のコード

color = 'white'

if predicted_label == '犬':
  color = 'blue'
elif predicted_label == '羊':
  color = 'pink'

color  # 'white'と出力される<jupyter_output><empty_output><jupyter_text>ループ処理（for文）  リスト18-4　ループ処理（for文）を行うコード例<jupyter_code>import matplotlib.pyplot as plt  # 下記コードの実行に必要なライブラリを追記

for i in range(25):
  plt.subplot(5, 5, i+1)
  # ……省略……<jupyter_output><empty_output><jupyter_text>リスト18-5　ループ処理（while文）を行うコード例<jupyter_code>import matplotlib.pyplot as plt  # 下記コードの実行に必要なライブラリを追記

i = 0
while i < 25:
  plt.subplot(5, 5, i+1)
  i = i + 1
  # ……省略……
else:
  print('ループ終了')<jupyter_output><empty_output><jupyter_text>ループ処理の中断と継続  リスト18-6　ループ処理を中断するコード例<jupyter_code>import matplotlib.pyplot as plt  # 下記コードの実行に必要なライブラリを追記

for i in range(25):
  plt.subplot(5, 5, i+1)
  if i >= 2:
    break
  # ……省略……<jupyter_output><empty_output><jupyter_text>リスト18-7　次のループ処理にスキップして継続するコード例<jupyter_code>import matplotlib.pyplot as plt  # 下記コードの実行に必要なライブラリを追記

for i in range(25):
  if i >= 2:
    continue
  plt.subplot(5, 5, i+1)
  # ……省略……<jupyter_output><empty_output><jupyter_text>四則演算  リスト19-1　四則演算のコード例<jupyter_code>num = 5 + 3
print(num)  # 8（足し算）

num = 5 - 3
print(num)  # 2（引き算）

num = 5 * 3
print(num)  # 15（かけ算）

num = 5 / 3
print(num)  # 1.6666666666666667（割り算）

num = 5 % 3
print(num)  # 2（余り）<jupyter_output><empty_output><jupyter_text>文字列フォーマット  リスト20-1　文字列をフォーマットするコード例<jupyter_code>msg = '{} {:2.0f}% ({})'.format('予測結果の分類内容',
                                72.5,
                                '正解ラベルの分類内容')
print(msg)  # '予測結果の分類内容 72% (正解ラベルの分類内容)'<jupyter_output><empty_output><jupyter_text>クラスの利用  リスト21-1　クラスのインスタンスを生成するコード例<jupyter_code>model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])<jupyter_output><empty_output><jupyter_text>リスト22-1　インスタンスメソッドのコード例<jupyter_code>model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)<jupyter_output><empty_output><jupyter_text>オブジェクト指向  リスト23-1　オブジェクトの型を調べているコード例<jupyter_code>a = 1.2
type(a)  # floatと出力される<jupyter_output><empty_output><jupyter_text>リスト23-2　2つのオブジェクトが同じか違うかを判定しているコード例<jupyter_code>b = 1.2
c = a

print(a is b)      # False（aとbは数値を同じだがオブジェクトは異なる）
print(a is not b)  # True
print(a is c)      # True（aとcはオブジェクトが全く同じ）<jupyter_output><empty_output><jupyter_text>リスト23-3　対象クラスのインスタンスかどうかを判別しているコード例<jupyter_code>print(isinstance(model, tf.keras.models.Sequential)) # True（modelはtf.keras.models.Sequentialクラスのインスタンス）

# ちなみに、データの型の比較は、基本的に次のように書く
print(type(a) == float)  # True（aの型はfloat）<jupyter_output><empty_output><jupyter_text>クラスの定義  リスト24-1　無視する変数の書き方<jupyter_code>(x_train, y_train),(_, _) = mnist.load_data()<jupyter_output><empty_output><jupyter_text>リスト24-3　クラスの継承元のコード<jupyter_code>from tensorflow.python.keras.engine.network import Network  # 下記コードの実行に必要なモジュールを追記
# ……省略……

class Model(Network):
  # ……省略……

  def compile(self,
              optimizer,
              loss=None,
              metrics=None,
              loss_weights=None,
              sample_weight_mode=None,
              weighted_metrics=None,
              target_tensors=None,
              distribute=None,
              **kwargs):
    pass # ……省略……

  def fit(self,
          x=None,
          y=None,
          batch_size=None,
          epochs=1,
          verbose=1,
          callbacks=None,
          validation_split=0.,
          validation_data=None,
          shuffle=True,
          class_weight=None,
          sample_weight=None,
          initial_epoch=0,
          steps_per_epoch=None,
          validation_steps=None,
          max_queue_size=10,
          workers=1,
          use_multiprocessing=False,
          **kwargs):
    pass # ……省略……

  def evaluate(self,
               x=None,
               y=None,
               batch_size=None,
               verbose=1,
               sample_weight=None,
               steps=None,
               max_queue_size=10,
               workers=1,
               use_multiprocessing=False):
    pass # ……省略……

  # ……省略……<jupyter_output><empty_output><jupyter_text>リスト24-2　クラスを定義しているコード例<jupyter_code># ……省略……
# ※後述のリスト24-3を先に実行しないと、このコードはエラーになる

class Sequential(Model):
  # ……省略……

  # コンストラクターの定義と実装
  def __init__(self, layers=None, name=None):
    # ……省略……
    # インスタンス変数の定義と値の代入
    self.supports_masking = True
    # ……省略……

  # インスタンスメソッドの定義と実装
  def add(self, layer):
    # ……省略……
    # # インスタンス変数の定義や利用
    self.built = False
    # ……省略……

  # ……省略……<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12429479717023373, 'fraction_numerical': 0.0250738783916898, 'mean_word_length': 5.418390804597701, 'pattern_counts': {'":': 0, '<': 182, '<?xml version=': 0, '>': 183, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '45', 'dir': 'jupyter-structured-clean-dedup', 'id': '377301', 'license': 'Apache-2.0', 'n_tokens_mistral': 6139, 'n_tokens_neox': 5862, 'n_words': 621, 'path': 'docs/articles/deeplearning1g1t_lesson07.ipynb', 'repo_name': 'DeepInsider/playground-data', 'size': '11167'}