Python {Article121}

ようこそ「Python」へ...

TensorFlow(CPU), KerasをWindows11に確実にインストールするための手順【Visual Studio Code編】

ここではPythonの機械学習用のオープンソースライブラリ「TensorFlow」とニューラルネットワークライブラリ「Keras」をWindows 11にインストールするための手順を解説します。 なお、ここで解説するのはMicrosoftの開発ツールVisual Studio Codeを使用してPythonのアプリケーションを開発することを前提にしています。 Jupter Notebookを使用してPythonのアプリケーションを開発する場合のインストール手順は、 「記事(Article024)」を参照してください。

TensorFlowは「CPU」のみの環境と「CPU+GPU」の双方を使用する環境が用意されています。 今回インストールするPCにはGPUが組み込まれていないのでCPUのみの環境にTensorFlow(CPU)をインストールします。 「GPU」が組み込まれているPCにTensorFlow(GPU)をインストールする手順については、 「記事(Article025)で解説しています。 TensorFlowをインストールするには64-Bitの「PC、Windows OS, Python」が必要になります。 ここではDELL VOSTRO、Windows 11(64-Bit)、Python 3.10.x(64-Bit)の環境にインストールします。

この記事では、Pandas、Matplotlibのライブラリを使用しますので 「記事(Article001) | 記事(Article002) | 記事(Article003) | 記事(Article004)」 を参照して事前にインストールしておいてください。 Pythonのコードを入力するときにMicrosoftのVisula Studio Codeを使用します。 まだ、インストールしていないときは「記事(Article001)」を参照してインストールしておいてください。

説明文の左側に図の画像が表示されていますが縮小されています。 画像を拡大するにはマウスを画像上に移動してクリックします。 画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。 画像の任意の場所をクリックして閉じることもできます。

click image to zoom!
図A: TensorFlow(CPU1)
click image to zoom!
図B TensorFlow(CPU2)
click image to zoom!
図C TensorFlow(CPU3)
click image to zoom!
図D LSTM(1)
click image to zoom!
図E LSTM(2)

Windows 11にPythonのライブラリTensorFlow(CPU)とKerasをインストールする

  1. Python 3.10.x(64-bit)をインストールする

    まずは「Python公式サイト」からPython 3.10.x(64-bit)をダウンロードしてインストールします。 ダウンロードが完了したら「python-3.10.9-amd64.exe」をダブルクリックしてインストールします。 インストール画面が表示されたら指示に従ってインストールを完了させます。 インストールするときPythonのインストール先フォルダをWindowsのメモ帳などにコピペしておきます。
    Python 3.10.xのデフォルトのインストール先:
    C:\Users\...\AppData\Local\Programs\Python\Python310
    
    click image to zoom!
    図1
    Pythonの公式サイトからPython 3.10.xの64-bit版をクリックしてダウンロードしてインストールします。
  2. Pythonの仮想環境(venv)を作成する

    Visual Studio Code(VS Code)を起動したら「File」メニューから「Open Folder...」を選択して任意のプロジェクトフォルダを選択します。 ここでは「PythonTensorflowCPU2」を選択します。
    Pythonの仮想環境を作成するためのコマンド:
    C:\Users\...\AppData\Local\Programs\Python\Python310\python.exe -m venv venv 
    ※オレンジ色の部分は各自の環境に合わせて書き換えてください。   
    click image to zoom!
    図2-1
    VS Codeの「File」メニューから「Open Folder...」を選択します。
    click image to zoom!
    図2-2
    「Open Folder」のダイアログが表示されたらプロジェクトフォルダを選択して「フォルダの選択」ボタンをクリックします。
    click image to zoom!
    図2-3
    VS Codeの「Terminal」メニューから「New Terminal」を選択して「Terminal Window」を開きます。
    click image to zoom!
    図2-4
    「Terminal Window」から「C:\...\python.exe -m venv venv」コマンドを入力したら [Enter]を押して仮想フォルダを作成します。 プロジェクトフォルダに仮想フォルダ「venv」が作成されていることを確認したら 「Terminal Window」からゴミ箱のアイコンをクリックして「Terminal Window」を閉じます。
    click image to zoom!
    図2-5
    VS Codeから[Ctrl+Shift+P]を同時に押してコマンドリストを表示します。 コマンドリストが表示されたら「Select Interpreter...」を選択します。 そしてリストから「★ Python 3.10.9('venv':venv)...」を選択します。 最後に「Terminal」メニューから「New Terminal」を選択して再度「Terminal Window」を開きます。
    click image to zoom!
    図2-6
    「Terminal Window」の左側に「(venv)」が表示されていることを確認します。 これでVS Codeが仮想環境を使用できる状態になっています。
  3. pip installでTensorFlow(CPU)をインストールする

    本記事作成時点では、 「pip install」コマンドで「TensorFlow(CPU)」がインストールできるのは、 Pythonのバージョンが「Python 3.10.x」のみです。 Pythonのその他のバージョン(Python 3.7, Python 3.8, Python 3.8)にTensorFlow(CPU)をインストールするには、 TensorFlow(CPU)の「Build Distributions」ファイルをダウンロードしてインストールする必要があります。 なお、「Build Distributions」ファイルを使用してインストールする手順については後述します。
    TensorFlow(CPU)をインストールするpip installコマンド:
    pip install tensorflow-cpu  
    click image to zoom!
    図3-1
    「Terminal Window」から「pip install tensorflow-cpu」を入力して「TensorFlow(CPU)」をインストールします。
    click image to zoom!
    図3-2
    この図はTensorFlow(CPU)が正常にインストールされたときの画面です。
  4. TensorFlow(CPU)の「Build Distributions」ファイルをダウンロードしてインストールする

    TensorFlow(CPU)の「Build Distributions」ファイルは 「ここ」 からダウンロードすることができます。
    pip installでTensorFlow(CPU)をインストールするコマンド: 
    pip install wheel    
    pip install C:\xps8700\PythonTensorflowCPU...\tf-cpu-only\tensorflow_cpu-2.11.0-cp310-cp310-win_amd64.whl   
    ※オレンジ色の部分は各自の環境に合わせて書き換えてください。
    「wheel」がインストールされていないときは、事前に「pip install wheel」でインストールしてください。
    
    TensorFlow(CPU)の「Build Distributions」ファイル一覧:
    tensorflow_cpu-2.11.0-cp37-cp37m-win_amd64.whl
    tensorflow_cpu-2.11.0-cp38-cp38-win_amd64.whl
    tensorflow_cpu-2.11.0-cp39-cp39-win_amd64.whl
    tensorflow_cpu-2.11.0-cp310-cp310-win_amd64.whl    
    click image to zoom!
    図4-1
    TensorFlow(CPU)のダウンロードページに移動したらPythonのバージョン番号に対応する「Build Distributions」ファイルをダウンロードして 任意のフォルダに移動します。 ここでは、Python 3.10に対応したファイルをダウンロードします。 ダウンロードしたファイルはプロジェクトフォルダにサブフォルダ「tf-cpu-only」を作成して保存しています。
    click image to zoom!
    図4-2
    VS Codeの「Terminal」メニューから「New Terminal」を選択して「Terminal Window」を表示したら、 「pip install C:\...\tensorflow_cpu...whl」のコマンドを入力してTensorFlow(CPU)をインストールします。
  5. Visual Studio CodeでTensorFlowが使用できるか確認する

    VS Codeを起動したら新規ファイルを作成して行1-22をコピペします。

    Tensorflow CPU.py:
    # TensorFlow CPU.py
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 
    # 0 = all messages are logged (default behavior)
    # 1 = INFO messages are not printed
    # 2 = INFO and WARNING messages are not printed
    # 3 = INFO, WARNING, and ERROR messages are not printed
    
    import sys
    import keras
    import pandas as pd     # pip install pandas
    import sklearn as sk    # pip install -U scikit-learn
    import tensorflow as tf
    
    print(f"Keras Version: {keras.__version__}")
    print(f"Tensor Flow Version: {tf.__version__}")
    print()
    print(f"Python {sys.version}")
    print(f"Pandas {pd.__version__}")
    print(f"Scikit-Learn {sk.__version__}")
    gpu = len(tf.config.list_physical_devices('GPU'))>0
    print("GPU is", "available" if gpu else "NOT AVAILABLE (CPU only)")
    click image to zoom!
    図5
    Pythonのライブラリ「pandas, sklearn」をまだインストールしていないときは、 「pip install」コマンドで事前にインストールしておいてください。 インストールのコマンドはソースコードのコメントに記載しています。

    VS Codeから起動ボタンを「▶」をクリックしてプログラムを起動します。

    Keras, TensorFlow, Pandas, Scikit-Leanのバージョン番号が表示されます。 また「GPU is NOT AVAILABLE (CPU only)」が表示されます。
  6. ビットコインの価格を予測するプログラムでTensorFlowが正常に動作するか確認する

    VS Codeを起動したら新規ファイルを作成して行1-139をコピペして保存します。

    Tensorflow Predicting Crypto Prices.py:
    TensorFlow Predicting Crypto Prices in Python.py
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
    # In detail:-
    # 0 = all messages are logged (default behavior)
    # 1 = INFO messages are not printed
    # 2 = INFO and WARNING messages are not printed
    # 3 = INFO, WARNING, and ERROR messages are not printed
    
    import numpy as np              # pip install numpy or # pip install numpy==1.19.5 
    import matplotlib.pyplot as plt # pip install matplotlib
    import pandas as pd             # pip install pandas
    import datetime as dt
    from time import sleep
    
    import yfinance as yf           # pip install yfinance
    
    # pip install tensorflow-cpu
    # pip install sklearn
    # pip install scikit-learn
    
    from sklearn.preprocessing import MinMaxScaler
    from keras import models
    from keras.layers import Dense, Dropout, LSTM
    from keras.models import Sequential
    
    ###############################################################################################################################################
    def load_historic_data(symbol: str, start_date: dt.datetime , end_date: dt.datetime, period='1d', interval='1d', prepost=True) -> pd.DataFrame:
        # valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
        # fetch data by interval (including intraday if period < 60 days)
        # valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo    
        try:
            start_date_str = dt.datetime.strftime(start_date, "%Y-%m-%d")
            end_date_str = dt.datetime.strftime(end_date, "%Y-%m-%d")
            df = yf.download(symbol, start=start_date_str, end=end_date_str, period=period, interval=interval, prepost=prepost)
            #  Add symbol
            df["Symbol"] = symbol
            return df
        except:
            print('Error loading stock data for ' + symbol)
            return pd.DataFrame()
    
    ### Main
    
    crypto_currency = 'BTC'
    against_currency = 'USD'
    
    start = dt.datetime(2016,1,1)
    end = dt.datetime.now()
    symbol = f"{crypto_currency}-{against_currency}"    # 'BTC-USD'
    print(f"Loading data for {symbol}")
    data = load_historic_data(symbol, start, end)
    
    # print('-'*200)
    # print(data.info())
    # print('-'*200)
    # print(data.head(3))
    # print('-'*200)
    # print(data.tail(3))
    # print('-'*200)
    
    # DatetimeIndex: 1824 entries, 2018-01-23 00:00:00+00:00 to 2023-01-21 00:00:00+00:00
    # Data columns (total 7 columns):
    #  #   Column     Non-Null Count  Dtype  
    # ---  ------     --------------  -----  
    #  0   Open       1824 non-null   float64
    #  1   High       1824 non-null   float64
    #  2   Low        1824 non-null   float64
    #  3   Close      1824 non-null   float64
    #  4   Adj Close  1824 non-null   float64
    #  5   Volume     1824 non-null   int64  
    #  6   Symbol     1824 non-null   object 
    # dtypes: float64(5), int64(1), object(1)
    
    # Prepare data
    
    scaler = MinMaxScaler(feature_range=(0,1))
    scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
    
    prediction_days = 60
    x_train, y_train = [], []
    
    for x in range(prediction_days, len(scaled_data)):
        x_train.append(scaled_data[x-prediction_days:x, 0])
        y_train.append(scaled_data[x, 0])
    
    x_train, y_train = np.array(x_train), np.array(y_train)
    x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
    
    # Create Neural Network
    # pip install numpy==1.19.5  # install numpy 1.19.5 if you get an error
    
    model = Sequential()
    
    model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
    model.add(Dropout(0.2))
    model.add(LSTM(units=50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units=50))
    model.add(Dropout(0.2))
    model.add(Dense(units=1))
    
    model.compile(optimizer='adam', loss='mean_squared_error')
    model.fit(x_train, y_train, epochs=25, batch_size=32)
    
    # Testing model
    
    test_start = dt.datetime(2020,1,1)
    test_end = dt.datetime.now()
    
    print(f"Loading test data for {symbol}")
    test_data = load_historic_data(symbol, test_start, test_end)
    
    actual_prices = test_data['Close'].values
    
    total_dataset = pd.concat((data['Close'], test_data['Close']), axis=0)
    
    model_inputs = total_dataset[len(total_dataset) - len(test_data) - prediction_days:].values
    model_inputs = model_inputs.reshape(-1, 1)
    model_inputs = scaler.fit_transform(model_inputs)
    
    x_test = []
    
    for x in range(prediction_days, len(model_inputs)):
        x_test.append(model_inputs[x-prediction_days:x, 0])
    
    x_test = np.array(x_test)
    x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
    
    prediction_prices = model.predict(x_test)
    prediction_prices = scaler.inverse_transform(prediction_prices)
    
    plt.plot(actual_prices, color='black', label='Actual Prices')
    plt.plot(prediction_prices, color='green', label='Predicted Prices')
    plt.title(f'{crypto_currency} price prediction')
    plt.xlabel('Time')
    plt.ylabel('Price')
    plt.legend(loc='upper left')
    plt.show()
    click image to zoom!
    図6-1
    Pythonのライブラリ「matplotlib, yfinance」をまだインストールしていないときは、 事前に「pip install」コマンドでインストールしておいてください。 インストールのコマンドはソースコードのコメントに記載しています。

    VS Codeから起動ボタンをクリックしてプログラムを起動します。 プログラムが起動されると学習経過が表示されます。 そして最後にビットコインの価格と予想価格のグラフが表示されます。
    click image to zoom!
    図6-2
    この図はビットコインの実価格と予想価格のグラフです。 これでTensorFlow(CPU)が正常に動作することが確認できました。