Googleのリソースでニューラルネットワークを無料でトレーニングしたいですか? Colab詳細チュートリアル

元のリンクhttps://jinkey.ai/post/tech/x …
著者Jinkey(WeChat公開番号jinkey-love、公式ウェブサイトhttps://jinkey.ai
この条項は、知的財産権を侵害しているとみなされるこの段落で複製された著作権情報を転載、削除、または改変することを許すものではなく、法的責任を追及する権利を留保します。

1はじめに

Colabは、Python 2とPython 3の環境を素早く切り替え、Googleのファミリーバケット(TensorFlow、BigQuery、GoogleDriveなど)をサポートし、カスタムライブラリをインストールするためのpipをサポートするために設計された、内部のJupyter NotebookのインタラクティブなPython環境です。
ウェブサイト:
Https://colab.research.google …

2ライブラリのインストールと使用

Colabには、Tensorflow、Matplotlib、Numpy、Pandasなどの深い学習ベースライブラリが付属しています。 Kerasのような他の依存関係が必要な場合は、新しいコードブロックを作成し、

# 安装最新版本Keras
# https://keras.io/
!pip install keras
# 指定版本安装
!pip install keras==2.0.9
# 安装 OpenCV
# https://opencv.org/
!apt-get -qq install -y libsm6 libxext6 && pip install -q -U opencv-python
# 安装 Pytorch
# http://pytorch.org/
!pip install -q http://download.pytorch.org/whl/cu75/torch-0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl torchvision
# 安装 XGBoost
# https://github.com/dmlc/xgboost
!pip install -q xgboost
# 安装 7Zip
!apt-get -qq install -y libarchive-dev && pip install -q -U libarchive
# 安装 GraphViz 和 PyDot
!apt-get -qq install -y graphviz && pip install -q pydot

3 Googleドライブのファイル操作

承認されたログイン

同じノートブックの場合、ログイン操作は一度だけ実行すれば、進捗状況を読み書きすることができます。

# 安装 PyDrive 操作库,该操作每个 notebook 只需要执行一次
!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

# 授权登录,仅第一次的时候会鉴权
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

このコードを実行すると、次の内容が印刷されます。ログインを許可する接続をクリックし、入力ボックスに入力するトークン値を取得し、Enterキーを押してログインを完了します。

ディレクトリの移動

# 列出根目录的所有文件
# "q" 查询条件教程详见:https://developers.google.com/drive/v2/web/search-parameters
file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file1 in file_list:
  print('title: %s, id: %s, mimeType: %s' % (file1['title'], file1['id'], file1["mimeType"]))

コンソールの印刷結果を見ることができます

タイトル:Colabテスト、id:1cB5CHKSdL26AMXQ5xrqk2kaBv5LSkIsJ8HuEDyZpeqQ、mimeType:application / vnd.google-apps.document

タイトル:Colab Notebooks、id:1U9363A12345TP2nSeh2K8FzDKSsKj5Jj、mimeType:application / vnd.google-apps.folder

idは、ファイルを取得する次のチュートリアルの一意の識別子です。 Colab Notebooksフォルダー内のファイルを照会する場合、照会条件は次のように記述することができます。

# '目录 id' in parents
file_list = drive.ListFile({'q': "'1cB5CHKSdL26AMXQ5xrqk2kaBv5LBkIsJ8HuEDyZpeqQ' in parents and trashed=false"}).GetList()

ファイルの内容を読む

現在、コンテンツを直接読み取ることができるフォーマットは.txt (mimeType:text / plain)であり、コードを読んでください:

file = drive.CreateFile({'id': "替换成你的 .txt 文件 id"}) 
file.GetContentString()

.csvGetContentString()でデータの最初の行だけを印刷できる場合は、

file = drive.CreateFile({'id': "替换成你的 .csv 文件 id"}) 
#这里的下载操作只是缓存,不会在你的Google Drive 目录下多下载一个文件
file.GetContentFile('iris.csv', "text/csv") 

# 直接打印文件内容
with open('iris.csv') as f:
  print f.readlines()
# 用 pandas 读取
import pandas
pd.read_csv('iris.csv', index_col=[0,1], skipinitialspace=True)

Colabは結果を表形式で直接出力します(次の図は虹彩データセットの最初の数行です)。虹彩データセットのアドレスはhttp://aima.cs.berkeley.edu/d …です。自分のGoogleドライブ。

ファイル操作の書き込み

# 创建一个文本文件
uploaded = drive.CreateFile({'title': '示例.txt'})
uploaded.SetContentString('测试内容')
uploaded.Upload()
print('创建后文件 id 为 {}'.format(uploaded.get('id')))

より多くの操作はhttp://pythonhosted.org/PyDri …で見つけることができます

4 Googleスプレッドシート操作

承認されたログイン

同じノートブックの場合、ログイン操作は一度だけ実行すれば、進捗状況を読み書きすることができます。

!pip install -upgrade -q gspread
from google.colab import auth
auth.authenticate_user()

import gspread
from oauth2client.client import GoogleCredentials

gc = gspread.authorize(GoogleCredentials.get_application_default())

読む

iris.csvのデータをインポートしてデモンストレーション用のGoogleシートファイルを作成します。このファイルはGoogleドライブの任意のディレクトリに置くことができます。

worksheet = gc.open('iris').sheet1

# 获取一个列表[
# [第1行第1列, 第1行第2列, ... , 第1行第n列], ... ,[第n行第1列, 第n行第2列, ... , 第n行第n列]]
rows = worksheet.get_all_values()
print(rows)

#  用 pandas 读取
import pandas as pd
pd.DataFrame.from_records(rows)

印刷結果は次のとおりです。

['5.1'、 '3.5'、 '1.4'、 '0.2'、 'setosa']、['4.9'、 '3'、 '1.4'、 '0.2'、 'setosa'] …

書く

sh = gc.create('谷歌表')

# 打开工作簿和工作表
worksheet = gc.open('谷歌表').sheet1
cell_list = worksheet.range('A1:C2')

import random
for cell in cell_list:
  cell.value = random.randint(1, 10)
worksheet.update_cells(cell_list)

5ファイルをローカルにダウンロードする

with open('example.txt', 'w') as f:
  f.write('测试内容')
files.download('example.txt')

6実際の戦闘

Github https://github.com/JinkeycodeのオープンソースのLSTMテキスト分類プロジェクトの例です
3つのファイルをGoogleドライブのmaster/dataディレクトリにmaster/dataします。 この例では、健康、技術、デザインの3つのカテゴリのタイトルの分類を示しています。

新しい

Colabで新しいPython2ノートブックを作成する

インストールの依存関係

!pip install keras
!pip install jieba
!pip install h5py

import h5py
import jieba as jb
import numpy as np
import keras as krs
import tensorflow as tf
from sklearn.preprocessing import LabelEncoder

データの読み込み

承認されたログイン

# 安装 PyDrive 操作库,该操作每个 notebook 只需要执行一次
!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

def login_google_drive():
  # 授权登录,仅第一次的时候会鉴权
  auth.authenticate_user()
  gauth = GoogleAuth()
  gauth.credentials = GoogleCredentials.get_application_default()
  drive = GoogleDrive(gauth)
  return drive

GDの下のすべてのファイルを一覧表示する

def list_file(drive):
  file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
  for file1 in file_list:
    print('title: %s, id: %s, mimeType: %s' % (file1['title'], file1['id'], file1["mimeType"]))
    

drive = login_google_drive()
list_file(drive)

作業環境へのデータのキャッシュ

def cache_data():
  # id 替换成上一步读取到的对应文件 id
  health_txt = drive.CreateFile({'id': "117GkBtuuBP3wVjES0X0L4wVF5rp5Cewi"}) 
  tech_txt = drive.CreateFile({'id': "14sDl4520Tpo1MLPydjNBoq-QjqOKk9t6"})
  design_txt = drive.CreateFile({'id': "1J4lndcsjUb8_VfqPcfsDeOoB21bOLea3"})
  #这里的下载操作只是缓存,不会在你的Google Drive 目录下多下载一个文件
  
  health_txt.GetContentFile('health.txt', "text/plain")
  tech_txt.GetContentFile('tech.txt', "text/plain")
  design_txt.GetContentFile('design.txt', "text/plain")
  
  print("缓存成功")
  
cache_data()

作業環境からデータを読み込む

def load_data():
    titles = []
    print("正在加载健康类别的数据...")
    with open("health.txt", "r") as f:
        for line in f.readlines():
            titles.append(line.strip())

    print("正在加载科技类别的数据...")
    with open("tech.txt", "r") as f:
        for line in f.readlines():
            titles.append(line.strip())


    print("正在加载设计类别的数据...")
    with open("design.txt", "r") as f:
        for line in f.readlines():
            titles.append(line.strip())

    print("一共加载了 %s 个标题" % len(titles))

    return titles
  
titles = load_data()

ロードタグ

def load_label():
    arr0 = np.zeros(shape=[12000, ])
    arr1 = np.ones(shape=[12000, ])
    arr2 = np.array([2]).repeat(7318)
    target = np.hstack([arr0, arr1, arr2])
    print("一共加载了 %s 个标签" % target.shape)

    encoder = LabelEncoder()
    encoder.fit(target)
    encoded_target = encoder.transform(target)
    dummy_target = krs.utils.np_utils.to_categorical(encoded_target)

    return dummy_target
  
target = load_label()

テキストの前処理

max_sequence_length = 30
embedding_size = 50

# 标题分词
titles = [".".join(jb.cut(t, cut_all=True)) for t in titles]

# word2vec 词袋化
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor(max_sequence_length, min_frequency=1)
text_processed = np.array(list(vocab_processor.fit_transform(titles)))

# 读取词标签
dict = vocab_processor.vocabulary_._mapping
sorted_vocab = sorted(dict.items(), key = lambda x : x[1])

ニューラルネットワークの構築

ここでは、Embeddingとlstmが最初の2つのレイヤーとして使用され、出力はsoftmaxによってアクティブ化されます。

# 配置网络结构
def build_netword(num_vocabs):
    # 配置网络结构
    model = krs.Sequential()
    model.add(krs.layers.Embedding(num_vocabs, embedding_size, input_length=max_sequence_length))
    model.add(krs.layers.LSTM(32, dropout=0.2, recurrent_dropout=0.2))
    model.add(krs.layers.Dense(3))
    model.add(krs.layers.Activation("softmax"))
    model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

    return model
  
num_vocabs = len(dict.items())
model = build_netword(num_vocabs=num_vocabs)

import time
start = time.time()
# 训练模型
model.fit(text_processed, target, batch_size=512, epochs=10, )
finish = time.time()
print("训练耗时:%f 秒" %(finish-start))

予測サンプル

Senは自分の文に置き換えることができ、予測結果は[健康类文章概率, 科技类文章概率, 设计类文章概率]であり、最高確率はクラスであるが、最大確率は0.8未満である。記事

sen = "做好商业设计需要学习的小技巧"
sen_prosessed = " ".join(jb.cut(sen, cut_all=True))
sen_prosessed = vocab_processor.transform([sen_prosessed])
sen_prosessed = np.array(list(sen_prosessed))
result = model.predict(sen_prosessed)

catalogue = list(result[0]).index(max(result[0]))
threshold=0.8
if max(result[0]) > threshold:
    if catalogue == 0:
        print("这是一篇关于健康的文章")
    elif catalogue == 1:
        print("这是一篇关于科技的文章")
    elif catalogue == 2:
        print("这是一篇关于设计的文章")
    else:
        print("这篇文章没有可信分类")

元のリンク