Translate

2018年4月11日水曜日

TensorFlow Dev Summit 2018 キーノートセッション資料を動画から切り出してみる

またもや日本はハブられた、TensorFlow Dev Summit 2018。


キーノートを始めとする動画がYoutubeに上がっていたので
セッション資料のところだけを一生懸命きりだしてみた。


力尽きたのでKeynoteだけ公開します。

-----





















































































-----
最後の芋の葉っぱをそれほど高くない携帯で病気判定しているのだけど
多分その芋が主食で携帯はもっているけど裕福でない国にとって
携帯自動判定はすごくありがたいものだったのだろう。

学習済みInceptionV3とKeras.jsとかつかえば
ソフトウェアとしてはそれほど難易度は高くなさそうだが
それを必要な国で展開するところがDev Summitで拍手されるに値する
プロジェクトだったのだろう。

そういう、ユースケースを見つけてみたいものだ..



2018年4月4日水曜日

Actions on Google の Simulator が動かない(解決しました)

Googleアカウントを新規に捨てアカウントとして作成し、
Actions on Google の GUIDE にのっていた
Silly Name Maker を実際に
Dialogflow + Firebase(functions)で実装してみたが、

..Actions on Google 上の Simulatorで

「テスト用アプリがチャットから退出しました」

と必ず出てしまい、
Dialogflow (Analyticsから見れる) や
Firebase のログには全くアクセスした様子も出てこない..

公開前提の情報をActions on Google 上から入力して
(アプリ名を「テストアプリツー」にして)
動かしてみたが、これもダメ。




..実装ミスかと思って、
Actions on Google サイトの SAMPLES からたどれる
GitHub 上の Silly Name Maker (Firebase使わない版) を
インポートしてみたが、
これも動作しない..



イロイロ調べてみたら
・動作するアカウントと動作しないアカウントがある
・動作するアカウントは2つだけ
・動作しないアカウントは新規に作ったものは全部ダメ
・動作するアカウントの片方はスピーカ実機につないでいる開発用アカウントとしてたてたやつ
・もう一つの動作するアカウントは実機にはつないでいないが、いろんなGoogleアプリでログインして使っている(実機には使っていない)



..うーん、 GUIDE には TEST DRAFT は 30日で切れるという情報だけ..


さらにイロイロ試してみたら、
これまで動作していないGoogleアカウントで
自分の携帯電話にGoogleアシスタントをインストールして
その際のアカウントとして使ってみた


..ら、Googleアシスタント上でも動作するし、
Actions on Google の Simulator でも動くようになった..




(仮説)
Actions on Google Simulator でテスト可能にするには
・実機セットアップに使ったGoogleアカウント
・Google アシスタントセットアップに使ったGoogleアカウント
でないとダメ。




..現在、サポートへ送信しているが..


..Googleから返事、かえってくるかなあ..



※2018年4月7日追記

Actions on Google ページの「サポート」に、
質問フォームがあるのだ。
しかも、
  • 100日ごとに15回まで質問がおくれる
  • 日本語で質問できる
という、お得っぷり。

そこで上記の仮説をそのまま投げてみたら、
回答がかえってきた。

内容を要約すると、
  • Simulatorを動かすための前提としてGoogleアカウントに対して以下のアクティビティを有効にする必要がある
    • ウェブとアプリのアクティビティ
    • 端末情報
    • 音声アクティビティ
  • GoogleアシスタントアプリやGoogle Homeのセットアップをすると上記アクティビティが有効になるので、仮説は十分条件であるが必要条件にはなっていない、ということになる
  • 上記設定を変更するにはChromeで該当アカウントでログインして https://myaccount.google.com/activitycontrols を開く
ということだった。

なので捨てアカウントであっても https://myaccount.google.com/activitycontrols から上記3つの設定を変更することでSimulator上でのテストは可能になることが判明した。

サポートの返信は
だいたい1日に1回返ってくるという
業務としてシステムを組んでいる人にとっては
遅遅サービスだが、
質問がbooleanになるような回答であれば明確な答えがわかるので
ナントカとハサミは使いようだとおもう。

OK Google、Thank you google!


p.s.その2
後日談。
さきほど、ふとGUIDEをのぞいてみると..



しれっと追加になってる..

まあ、これから始める人はもう迷わないNe!


2018年3月28日水曜日

Watson Studio (Anaconda Free) の TensorFlow が 1.3.0 だった件

THINK2018 で鳴り物入りで出てきた Watson Studio。

Jupyter Notebookが動くと言うので早速試してみた。

..まあ無料で使わせてもらってる立場から
言うのもアレなんですけど..

GPU版はまだないのね...


Python3.5なのはいいとして..


import tensorflow が素直に動いたので、
おかしいなと思って

!pip list してみたら..


なんだ

TensorFlow 1.3.0 じゃん...








なぜか

キョーレツに湧き上がってくる

コレジャナイ感が...





もう一度いいますが...
タダで使わせてもらってるんですけどね..


2018年3月15日木曜日

Google Home アプリの実機テストは複数のアプリ同時にできない



対話システムの流れで
最近はいわゆるスマートスピーカ
Google Homeやら
Alexaやらのアプリケーション作成方法を調べている。

Alexaアプリ(スキルというらしいが..)の開発は
とても入りやすかった。

Amazon社がクラスメソッド社におそらくお金を出して作らせた
チュートリアルが無料公開されている。

Alexaスキル開発トレーニング(全6回)
https://developer.amazon.com/ja/alexa-skills-kit/training/building-a-skill


ぜんぶきちんと日本語だけど..一部UIがかわっているところがあり
そのあたりと..アクセス制御のあたりをうまいことやらないと動かない
という落とし穴はあるもののカン・経験・度胸のKKDエンジニアであれば
突破可能だ。


かわってGoogle、
きちんとガイドにはなっているものの..
全部の開発オプションが日本語対応されていないこともあって
一部しか日本語になっていない..

とはいえGetStartがあるのでこれに従って作ることは可能だ。

Amazon/Alexaスキルと比べるとGoogleのほうが複雑だが
なんとかSilly Name Makerを日本語で動かすことができた。

Amazonのトラップよりこっちは
UTF-8でindex.jsをつくらないとだめなことと
firebase.jsonを手書きで修正しないとfirwbase deployできないこと
くらいの経度な落とし穴だ。

なんとなくなれたので、もう1つプロジェクトを起こして
アプリを作り、さて実機テストしてやろうとしたのだけど..

あれ?片方しかうごかんなあ..


と、おもってAction Simulatorをあげたら..

..ん?一瞬 enableうんたらというカードがちょろっと出たなあ..



..もしやと思って、もう一方のプロジェクトも
Action Simulatorをあけたら..
同じ様に、右上に一瞬カードが表示された。

..どうも1つしかテストを有向にできないらしい..


無効状態がこれで..





有効がこんなかんじ..




※2018/3/16追記

上記画面でEnableにして画面を閉じてすぐに実機テストしたら動いていたのに
翌朝やってみたら動かなくなっていた..
で、Actions on Google consoleをひらいたら..Enableにします的メッセージが..

どうもEnableにしても、しばらくしたら自動でDisableになってしまうのか..


p.s.







Googleがgactions-CLI を翻訳したら

「怒りのCLI」

になるのか..

ランボーが、使ってそうなCLIだ...




2018年3月2日金曜日

TensorFlow 1.6.0でimportすらできない

本日正式版リリースになったTensorFlow1.6.0。


TeosnrFlow1.6.0をインストールして
jupyter notebook から

import tensorflow as tf

しただけで

The kernel appears to have died. It will restart automatically.
(カーネルが停止したようです。 自動的に再起動します。)

が出る問題がまだ解けない。
(コマンドラインだと illegal エラー(Core dumped)とかでる)


どうも

1.6.0リリースノート
https://github.com/tensorflow/tensorflow/releases/tag/v1.6.0

にある既知バグ(というか仕様ですと言い張られてる)

Prebuilt binaries will use AVX instructions. This may break TF on older CPUs.
(事前ビルドされたバイナリはAVX命令を使用します。 古いCPUでTFが破損する可能性があります。)

にあたるのだとおもうが..


processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 30
model name      : Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz
stepping        : 5
microcode       : 0x3
cpu MHz         : 1200.000
cache size      : 8192 KB

のクワッドコアですら「古いCPU」なのか..

grep avx /proc/cpuinfo
grep avx2 /proc/cpuinfo

を実行してみたが..なにも表示されなかったし..



..しっかし、RCが出てずっと悩んでるけど
Twitterで騒いでいる日本人は全く見ない..


..日本人って、だれも本気でTesnsorFlow やってないのかね..


ps.

ちなみにAnacondaでpip installできるのは執筆時点で1.5.0まで;-p

..何やねん..

ps2.

FloydHubもなかなか1.6対応してくれんなあ..ともやもやしている
昨今、こんなツィートがあった



OracleのIaaSだとうごきそうだ..



※2018/03/16 追記

TensorFlow1.7.0-rc0 がでたのでだめもとでやってみたら..

ダメでした..

そりゃそうね..

AVXじゃだめだったんだよなあ.. AVX2 対応マシンかあ..

Google Home を買ったので Actions on Google のマニュアルを読んでみた

Google Home を買った。

厳密には mini なのだけど、とりあえず買った。

朝希少した時くらいので「OK Google、今何時?」と聞くときと、
朝家を出る前に「OK Google 今日、傘要る?」と聞く以外
特に使っていないのだけど..

とはいえ、どう動いているか、
アプリとか作って売れるのかがきになり

Actions on Google のガイドを読んだ
URLは、ここ: https://developers.google.com/actions/

いつものように翻訳文を載せていないのは
1/7 ほど翻訳されていて、残りは英語だけど
Chromeの翻訳ボタンで十分ことたりるからだ。

で、基本構成は

以下、想像を入れて書いているので
鵜呑みにしないでください。

Google Home:
初期設定にはスマホアプリが必要で
スマホアプリを動かすにはGoogleアカウントログインしないとだめ。
スマホとBluetoothで初期設定してGoogleアカウントとWiFiAPを登録したら
Google Homeはインターネット上のGoogleアシスタントサーバの様なクラウドサービスと
基本やり取りしながら応答音声を返す。
OSや構造はこうかいされていないようなので、
OSの構造を理解したいのなら類似OSのAmbient OSをしらべるのもいい。

Googleアシスタント:
サーバのようなものが有り、ユーザ発話によって登録されているActionPackageのなかから
最適なActionを選んで起動しその後はActionとユーザにやり取りを任せる。
ActionPackageはJSON型式で記述可能(Action SDK使用時)で、
Dialoflow開発の場合のActionプロジェクトで作成しているのはおそらくこのJSON構成なのだとおもう。

ActionPackage:

 これを読むとDialogflowで定義していた内容の関連がよくわかる。
・パッケージにはManifestがMAX1つ存在、必要なサーフェス情報等
・パッケージ内にAction群とEntity群、ConversationFulfillmentを定義
・Actionは、MAX1つまでのIntentとMax1つまでのFulfillmentで構成
・Intentは、Max1つまでのトリガとParameter群で構成
・Entityは、名前と類似単語群で構成

Fullfillmentを名前でcall しているのは単にAbstractFactoryパターンなわけではなく
ConversationActionを含むFulfillmentがありその本体が
Firebaseではない場合はURL指定できるようにしている。
ここがスマートホームへの拡張のミソになっている。

Fulfillment:
特定のIntentで必要なEntity群情報をユーザの発話から読み切ったら呼び出される
アプリケーション実体。
DBへアクセスしてもいいし、NoSQLであってもいい、MQTTへなげてもいいし、
XSSに違反しないのであればコグニティブだったりそうでなかったりするRESTAPIを読んでも良い。
リファレンスアプリがFirebaseなのは使ってほしいのはもちろんだけど、
XSS問題でGoogleサービス囲い込みや、このアプリ瞬間だけ起動なのだからEC2的な
常時インスタンス化しなくてもいいしょ?というGoogleアーキテクトの思いが感じられる。
..とかいってるけどAlexaスキルのドキュメントでも同じLambda推奨だけどね;-p

Fullfilmentはnodeパッケージ開発できるようにもなっており、
独自に開発もできるらしい。
それでサードパーティクラウドをよびだすこともできるし、
サードパーティクラウド自体がFulfillmentしてもいいようにできている。


で、ポイントはActionPackageのマニフェスト。
このアクションパッケージを実行するにはこんなサーフェス機能がいるよ。
というのがかける。
これは、HueなどのIoTデバイスを前提としたアクションパッケージを定義できるようにしているのだ。
しかもガイドの中をよむと、カメラ、食器洗い機、ドライヤ、ライト、冷蔵庫、スイッチ、サーモスタット、掃除機、洗浄機、コンセント(アウトレット)、シーン(?)..

..Google、白物家電屋の征服に入ったか!

Alexaを持つAmazon陣営も当然そうだろう。
あ!、Amazonは小売りという強力な立場を傘にきることができるし..

危険だ、日本の家電製造業..逃げてー!
 


 

2018年2月23日金曜日

TesnorFlowの乳がんデータ分類器チュートリアルを翻訳してみた。

Twitterのタイムラインに以下の記事が流れてきた。



ので、読んでみたら、比較的読みやすい内容だったので、
翻訳してみた。
以下、at your own riskで参照してください。
--------

乳がん検出用ニューラルネットを簡単に構築できます


機械学習と人工知能があなたのプログラム方法を変えるでしょう。それは確かに学習に値するコーディングにおける基本的な変化です。最初はちょっと大変です - 物事を行うアルゴリズムを書くのではなく、代わりにマシンを訓練するのですから。

ふつうは、コンセプトカウント、つまり生産性を高めるために理解しなければならない新しいコトの数は、少しばかりなんです。そのことを念頭に置いて、私は、あなたを導くためのチュートリアルを書こうと思っていました。それが、細胞スキャンで乳がんを検出するニューラルネットワークです!

今回はCSVファイルとなっている構造化データを扱います。これは、生検で採取された細胞の画像を精密に検査して生成されたものです。また、画像を直接操作することも可能ですが、ここではこのアプローチを選択しました。このチュートリアルコードを変更すれば、気になる問題を修正することができるからです。癌検出に取り組んでいない可能性があります。うまくいけば、ここで使うテクニックもあなたのためになるでしょう!

私は 悪性または良性細胞の数値を持つ新しい列を作成するためにここで利用できるデータを少し調整して使用しました。修正されたデータセットはここにあります。

私はこのチュートリアルをできるだけシンプルで再利用できるようにしようとしました。他のデータがあれば、このコードを修正してニューラルネットワーク分類器を構築するのは比較的簡単です。


フィーチャーとラベルを理解する

本題に入る前に、「フィーチャー」と「ラベル」について詳しく説明させてください。ちょっと混乱するかもしれませんけど。

「フィーチャ」をデータの属性と考えてください。このチュートリアルで使用する乳癌データベースの場合は、細胞の大きさや形などです。電子メールを扱うのであれば、フィーチャーは送信者、件名、メール本文などになります。

「ラベル」は、予測または分類したいデータの属性と考えることができます。乳がんの場合、細胞が良性か悪性かを知りたいので、これがラベルになります。電子メールの例だと、メールが迷惑メールかどうかをラベルにすることができます。

ニューラルネットをトレーニングするプロセスは非常に簡単です。あなたは、フィーチャーとラベルを含むデータの束を用意します。そして、それをトレーニングセットとテストセットに分割します。

あなたのトレーニングセットから、あなたのフィーチャーを取り分け、対応するラベルが何であるかをニューラルネットに伝えます。損失関数と入力関数(これらについては次のチュートリアルで詳しく説明しています)に基づいて、ラベルを決定するフィーチャを使って学習します。

学習が終わったら、テストセットで試してみましょう。ここでは、ラベルの内容を予測し、正解ラベルの内容と比較します。これから、その正答率(accuracy)を判断することができます。


TensorFlow を使ってニューラルネットワークを構築する

理論的な話は十分ですね、ではコーディングをはじめましょう!それが学ぶための最善の方法の1つなのです。私は TensorFlow を使ってNeural Netをビルドしてテストました。Pythonをメインのプログラミング言語としてトレーニングやテストを実行します。

まず、必要なライブラリをインポートしましょう:


import tensorflow as tf
import pandas as pd
import numpy as np
pandas numpy は大量の数値計算やデータ管理をサポートしてくれるPythonのライブラリです。

次に、プログラムのさまざまな側面についていくつかの変数を作成しましょう。私はコードをより移植性の高いものにするためにこれらを最初に記述することが好きです。


# データはトレーニングセットとテストセットに分割する必要があります
# 80/20を使用するには、トレーニングのサイズを.8に設定します
training_set_size_portion = .8

# トレーニングセットとテストセットに分割する前に、データをシャッフルするには
# この値をTrueに設定します
do_shuffle = True
# 正解率(accuracy)スコアを記録する変数
accuracy_score = 0
# DNNにはユニットが隠されており、ここにその仕様が設定されています
hidden_units_spec = [10,20,10]
n_classes_spec = 2
# モデルとチェックポイントを保持するための一時ディレクトリを定義する
tmp_dir_spec = "tmp/model"
# トレーニングのステップ数
steps_spec = 2000
# epoch数
epochs_spec = 15
# ファイル名 - アップロードする場合はこれを必ず変更してください
file_name = "wdbc.csv"

# ここにフィーチャーセットがあります。
# CSVには、カラムの名前が表示されます。
# ここでは、これらのすべてを使用します(半径とテクスチャ)。
features = ['radius','texture']

# 予測するラベルは次のとおりです -- CSVの列でもあります(診断値)
labels = ['diagnosis_numeric']

# データを提供するファイル名は次のとおりです
data_name = 'wsbc.csv'

# データの入手もとURLは次のとおりです
data_url = 'http://www.laurencemoroney.com/wp-content/uploads/2018/02/wdbc.csv'
私はこのようにしてコードを非常に汎用的にしています。乳がんのデータに興味がない場合  は、これらの値、特にfeature_keyslabel_key、およびデータの場所(data_namedata_url)を変更してください。

では、データをロードしましょう:


file_name = tf.keras.utils.get_file(data_name, data_url)
my_data = pd.read_csv(file_name, delimiter=',')
簡単でしたね。



指定した列に基づいてトレーニングとテストセットを作成する

あなたのデータにはすでに何らかの形の順番があり、これは学習/テストに影響を与える可能性があります。たとえば、乳がんでサイズ別に分類され、最初のd報のデータが良性であり最後の方が悪性である可能性が高い場合は、良性のデータを中心にトレーニングしてしまい、テスト対象がほとんど悪性になってしまいます。トレーニングとテストセットに分割する前に、データをシャッフルすることは、一般的には良いアイデアなのです:

# pandas の DataFrame を使用すると、再インデックスメソッドをシャッフルできます
# Docs: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html#pandas.DataFrame.reindex
# doShuffleプロパティがtrueの場合、これをシャッフルします
# 本当にデータの傾向があなたの学習に影響しないことを確認するためにシャッフルするべきですが、
# ここではオプションにしています
if do_shuffle:
 randomized_data = my_data.reindex(np.random.permutation(my_data.index))
else:
 randomized_data = my_data
データをランダム化したら、次に分割します。先ほどトレーニングサイズの部分を指定したので、それに基づいてトレーニングセットに含めるレコードの数を計算し、残りはテストセットにします。このコードは、各セットのサイズを提供しています...

total_records = len(randomized_data)
training_set_size = int(total_records * training_set_size_portion)
test_set_size = total_records = training_set_size
...このコードでは、トレーニングフィーチャとラベルに指定したサイズに基づいて、データをトレーニングフィーチャとラベルセットに分割します。私たちはrandomized_data の'head' (頭) から取っていきます。

# トレーニングフィーチャとトレーニングラベルの構築
training_features = randomized_data.head(training_set_size)[features].copy()
training_labels = randomized_data.head(training_set_size)[labels].copy()
print(training_features.head())
print(training_labels.head())
同様に、 'tail' (お尻)のレコードにはテストセットが含まれています。test_set_size 分を取っていきます。

# テストフィーチャとテストラベルの構築
testing_features = randomized_data.tail(test_set_size)[features].copy()
testing_labels = randomized_data.tail(test_set_size)[labels].copy()


TensorFlow フィーチャカラムを作成する

ニューラルネットワーク分類器は、フィーチャカラムが tf.feature_column 型として指定する必要があります。ろれらのカラムはぜんぶ数値なので、numeric_column 型に設定します。

feature_columns = [tf.feature_column.numeric_column(key) for key in features]

データを分類するために使用されるニューラルネットワークを定義する

私たちがすべてのデータを持っていることを考えれば、データをトレーニングするニューラルネットワークオブジェクトを作成できます。これは、作成したばかりのフィーチャカラムと、ニューラルネットワークの隠れユニットの数を定義するパラメータ、およびクラスの数を引数として取ります。ネットワークをトレーニングするときに、一時ファイルとチェックポイント、および完成したモデルを指定されたモデルディレクトリに保存します。

隠れユニットは、ネットワークがどのように見えるかを直接的に指定したものです。例えば、ここでのデフォルトは [10,20,10] です。つまり、10個のニューロンの層があり、それぞれ20個のニューロンに接続されます。そして次の層である第3層の10個のニューロンに接続されます。

クラスは、私たちが分類しているクラスの(分類)数です。このケースでは、2つのクラスで乳がん分類を行っているので、2つのクラスをトレーニングします。


classifier = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=hidden_units_spec,
    n_classes=n_classes_spec,
    model_dir=tmp_dir_spec)


ネットワークをトレーニングする

次のステップは、データ使って分類器をトレーニングすることです。これを行うには、フィーチャー(別名 'x')とラベル(別名'y')を指定する入力関数を作成します  。これは pandas_input_fn として指定することによって行われます。

# トレーニング入力関数の定義
 train_input_fn = tf.estimator.inputs.pandas_input_fn(x=training_features, y=training_labels, num_epochs=epochs_spec, shuffle=True)
そしてニューラルネットワークに、入力関数と、それをトレーニングするために使用したいステップの数を与えることで、トレーニングを開始することができます。異なる結果を得るために異なるステップ数を試してみてください。2000ステップの乳がんデータの場合、私は通常、テストセットに対して 90% 以上の精度を得ることができました。

# 分類器を使ってモデルをトレーニングする
 classifier.train(input_fn=train_input_fn, steps=steps_spec)

ネットワークをテストする

モデルのトレーニングと同様に  テストフィーチャーとテストラベルを渡す以外は、まったく同じ方法で入力関数を指定することで、我々はモデルをテストします:

# テスト入力関数の定義
 test_input_fn = tf.estimator.inputs.pandas_input_fn(x=testing_features, y=testing_labels, num_epochs=epochs_spec, shuffle=False)
つぎに、分類器にテスト入力関数を評価させ、正解率を取得します。テストセットを渡し、分類結果を実際の値と比較し、これを使って正解率(accuracy)を計算し、正確なスコアを表示します:
# 正解率(accuracy) を評価する
 accuracy_score = classifier.evaluate(input_fn=test_input_fn)["accuracy"]
 print("Accuracy = {}".format(accuracy_score))
この時点で、ネットワークのトレーニングパラメータを調整して、ネットワークをトレーニングするための最良の値が何であるか把握することができます。場合によっては、適切なフィーチャーカラムをニューラルネットワークに与えていない場合があるかもしれません。また、ステップ数やネットワーク層の設定などを微調整することもできます。これは TensorFlow の素晴らしい点です。このように簡単に作業できます!

ネットワークを使用する

トレーニングを受けたテスト済みのネットワークが完成したので、まだ未投入のさまざまなデータセットを予測するためにどのように反応するかを見たいでしょう。それを実行する方法を実行して、ここで結果を読んでみましょう。

まず、予測セットはフィーチャー列と一致しなくてはなりません。したがって、このチュートリアルでは2つのフィーチャカラムに対してのみトレーニングを行い、しかも両方とも数値でした。このため予測セットで分類したいのであれば、同じ型式のデータをネットワークに渡す必要があります。たとえば、次のコードでは、半径14・テクスチャ25、半径13・テクスチャ26の2つのセルの予測セットを作成しています:


# 予測セットの作成 -- 分類させたい入力フィーチャーのリスト
prediction_set = pd.DataFrame({'radius':[14, 13], 'texture':[25, 26]})
そしてトレーニングやテストと同様に、入力関数を指定しますが、予測を始めるのでラベル(引数'y')がないので、ラベルを戻すことを期待して入力を指定します:
predict_input_fn = tf.estimator.inputs.pandas_input_fn(x=prediction_set, num_epochs=1, shuffle=False)
分類機はこの関数にもとづいてラベルを予測します。

# 予測結果のリストを取得する
predictions = list(classifier.predict(input_fn=predict_input_fn))
この処理はたくさんのデータを返しますが、私たちの分類は'classes'として保存されるので、それらを抽出してprintすることができます:

predicted_classes = [p["classes"] for p in predictions] results=np.concatenate(predicted_classes) print(results)

まとめ

ウィスコンシンのデータベースから乳がんのデータを分類するためにニューラルネットワークをトレーニングしただけでなく、あらゆるCSVファイルの分類を容易に行うことができるコードを作成しています。ぜひためして下のコメント欄にあなたの経験を書いて教えてください(元サイトにはコメント機能がある)!

--------

Estimator、入力関数の時代になったので、本家サイトのチュートリアルもそろそろかわるかもなあ..

Google Colab相当の環境をローカルPC上のDocker Composeで実現する

 Docker Composeの有料版に、お金を払いたくない ^H^Hが使えない ため古いゲーミングPC(GeForce3080)にDocker Composeを入れてその上のコンテナでGoogle Colab相当のノート操作ができないかためしてみた: コンテナイメージとして a...