機械学習では、時にはメモリに収まりきらないほどの大量のデータを扱う必要があります。 データを準備・加工する処理がボトルネックにならないようにするためには、例えば以下のような工夫が必要になります。 複数のデータをまとめて単一のファイルに保存することでファイルI/Oにかかるオーバーヘッドを減らす データをファイルから読み出してミニバッチを作成する一連のパイプラインを別スレッドで行う TensorFlowでは、前者に対しては TFRecord というバイナリ形式、後者に対しては DataSet API という強力な仕組みをサポートしています。 普段、Keras を使うことが多いのですが、Keras でも TensorFlow の便利な仕組みを使えないかと思いまとめてみました。 前提 サンプルコード 定数定義 TFRecord の作成 TFRecord の読み込み、DataSet API を使った
Keras Advent Calendar 2017 の 25日目 の記事です。 Kerasでモデルを学習するmodel.fit_generator()でつかうgeneratorを自作してみます。なお、使用したKerasのバージョンは2.1.2です。 はじめに Generatorをつくる Generatorをつかう おわりに はじめに Kerasでモデルを学習するには、 model.fit() model.fit_generator() model.test_on_batch() のいずれかを使うと思います。 fit()は、データがメモリにのるくらいの規模のデータに向いており、fit_generator()は、generatorを使ってバッチ毎にデータを読み込みます。メモリ以上のデータを扱うときやバッチ毎に処理をさせるときに使います。test_on_batch()を使うと学習ループをカスタ
はじめに LivesenseAdventCalendar 2016 の20日目を担当する @naotaka1128 です。 現在、転職会議という転職クチコミサービスのデータアナリストを担当しております。 転職会議は会社のクチコミが数百万件集まっている日本最大級の転職クチコミサービスです。現状はクチコミや評点を表示しているだけなのですが、今後はクチコミを自然言語処理などで分析して今までは手に入らなかったような有益な情報を世の中に提供していきたいと思っております。 今回はその取っ掛かりとして word2vec および doc2vec という自然言語処理の技術を用いてクチコミを分析し、会社の分類などを行ってみようと思います。 使用する自然言語処理技術 word2vec 昨今、word2vecという自然言語処理の技術が話題です。ご存じの方も多いかと思いますが、大量の文章をもちいて単語をベクトル表現
2017/06/21にリリースされた gensim 2.2.0 から Keras との統合機能が導入されました。 具体的には、Word2vec の Keras 用ラッパが導入されました。 これにより、gensim で分散表現を学習した後に、その重みを初期値として設定した Keras の Embedding層を取得できるようになりました。 本記事では、実際に gensim の Keras 統合機能を試してどのようなものなのか確認してみたいと思います。 実装 今回は、Word2vec の Keras 用ラッパーを使って、モデルを実装していきたいと思います。 具体的には 20NewsGroupsデータセットを用いて文書分類タスクに使用する例を示します。 以下の手順で実装していきます。 必要なライブラリのインストール Word2vec の学習と Embedding層の取得 モデルの構築 インストー
はじめに Keras に限らず、機械学習等の科学計算をおこなっているときに nan や inf が出現することがあります。 nan や inf は主にゼロ除算などのバグに起因して発生しますが、nan や inf それ自体を目的に使うこともあるため、エラーになるわけではありません。エラーになったとしても、「きっとどこかでゼロ除算しているんだろなぁ・・・」と思いを馳せることができるだけです。 そこで、TensorFlow 公式デバッガである tfdbg を使って、(TensorFlow バックエンドの) Keras モデルをデバッグして nan や inf の原因を追ってみます。 今回デモ用に利用したコードは公開していますので、ご興味があればご参照ください: https://github.com/keisuke-nakata/keras-tfdbg-tutorial tfdbg とは 公式の
(2018/01/05 追記)ちょうどpython-pptxを調べていたので、pptx形式で図を保存できるようにし、タイトルも修正しました。 はじめに 論文やスライドで、畳み込みニューラルネットワークのアーキテクチャを良い感じに表示したいときがありますよね?スライドだとオリジナル論文の図の引用でも良いかなという気がしますが、論文の図としては使いたくありません。 ということでKerasのSequentialモデルのような記法でモデルを定義すると、そのアーキテクチャを良い感じに図示してくれるツールを作りました。言ってしまえばテキストを出力しているだけのツールなので依存ライブラリとかもありません。 https://github.com/yu4u/convnet-drawer ここまで実装するつもりはなかったので綺麗に設計できていませんが、バグ報告や追加機能要望welcomeです! 経緯 元々は、
メリークリスマス!!!! @tabe2314です。 この記事では、明日から使えるChainerテクニックとして、既存モデルをファインチューンして新しいモデルをつくる際の個人的なベストプラクティスを紹介します。 ファインチューニング ニューラルネットを学習するために、別の問題、別のデータセットで学習済みのモデルのパラメータをコピーして、それを新しいニューラルネットのパラメータの初期値として使うことをファインチューニングといいます。 典型的なケースとして、一般物体認識のデータセットであるImageNetで学習したネットワークを物体検出やSemantic Segmentationといった別の問題に使用するといった例があります。 一般的にDeep Learningでは大量の学習データが必要とされていますが、あらかじめ(大量のデータで)学習したモデルを初期値として使いファインチューニングすることで、
データの次元圧縮手法について調べている時に、後輩が次元圧縮 + クラスタリングを同時に学習するディープラーニングの手法「Deep Embedded Clustering」を調べて教えてくれたのでせっかくだからChainerで実装してみようというのがこの記事です。 実装したコードはGithubで公開しています。 https://github.com/ymym3412/DeepEmbeddedClustering Deep Embedded Clusteringとは Deep Embedded Clusteringは「Unsupervised Deep Embedding for Clustering Analysis」という論文の中で提案されているクラスタリングの手法です。 次元圧縮やクラスタリングの手法は他にも以下のようなものがあります。 k-means、混合ガウスモデル(GMM) 高速に
Parametric t-SNEでt-SNEの変換をニューラルネットで近似することができたので、 その逆についてもやってみました。 逆変換と言っても特に難しいことはやっておらず、 まず普通にBarnes-Hut t-SNEで訓練データを2次元に変換して、 変換後の座標を入力、変換前の座標を教師データとして教師あり学習を行います。 今回は、変換後の座標のうち訓練データにないような座標について、 どのように逆変換されるのかが気になるので汎化性能を高めるためにDropoutを入れました。 コードは次の通りです。 t-SNEの結果がこんな感じで、 適当に座標を指定して逆変換した結果がこれ かなり綺麗に逆変換できました。 deconvolutionを使えばもっとうまく逆変換できるかもしれませんが、 MNISTの結果としてはこれで十分だと思います。 なんとかしてこの方針で画像生成とかできないのかなーと
最近では、機械学習を用いた事例が徐々に聞かれるようになってきました。しかし、MLエンジニアの方々からは「モデルを作ったはいいが、プロダクションに持っていくのは難しい」という声をよくいただきます。この要因は様々ですが、システムとして考慮しなければならない構成が多いというのが主だった要因になっています。 モデルはシステム全体のごく一部(黒い四角部分)中でも特にMLエンジニアを悩ませるのは、データの前処理ではないでしょうか?機械学習では学習と推論時にデータを入力する必要がありますが、プロダクション時のデータは取得してそのままモデルに入力することはできません。なぜなら、データには欠損があるかもしれないし、画像ならモデルに合わせてサイズや階調を変える必要があるからです。さらに、これらのデータが大量にある場合は、1台のマシンでは処理しきれなくなるため、分散環境を構築する必要があります。そして、将来どこ
何の話かというと TF1.0から、新しいモデルの保存形式として、SavedModelが導入されました。 (参考)TensorFlow SavedModel このフォーマットの特徴と使い方のTipsをまとめます。 SavedModel形式で保存する方法 典型的には、Experiment APIを利用します。Experiment APIは、tf.contrib.learnの中でも最もハイレベルなAPIで、 ・モデル ・トレーニング用データ入力関数 ・評価用データ入力関数 を与えて実行すると、トレーニング用データでトレーニングを行いつつ、適当なタイミングで評価用データによる評価結果も出力してくれるというものです。しかも、Experiment APIを利用したコードを Cloud MLE のジョブに投げると、何も考えなくても、自動的に分散学習処理が行われます。また、学習途中のチェックポイントを自動
Googleが開発した機械学習のためのオープンソースソフトウェア、TensorFlow。TensorFlowで学習するデータをインプットさせる場合、CSVやNumpyなどで用意したデータをそのまま利用することもできますが、TensorFlowが推奨フォーマットとして提供しているTFRecordもあります。 そこで、今回は、TensorFlowで推奨されている Dataset API を利用して、マルチスレッド(並列処理)で、バッチ単位にデータを取得する手法で、(機械学習の)「学習」を行っていきます。 ※データの扱い方について、以前の記事では、キューを扱うことを明示的に記載したコーディング(本記事では、以後「キューベースパイプライン」と呼ぶこととします)となっていましたが、TensorFlowバージョン1.4(2017年11月リリース)から、Dataset APIを利用することが推奨されてい
.app 1 .dev 1 #11WeeksOfAndroid 13 #11WeeksOfAndroid Android TV 1 #Android11 3 #DevFest16 1 #DevFest17 1 #DevFest18 1 #DevFest19 1 #DevFest20 1 #DevFest21 1 #DevFest22 1 #DevFest23 1 #hack4jp 3 11 weeks of Android 2 A MESSAGE FROM OUR CEO 1 A/B Testing 1 A4A 4 Accelerator 6 Accessibility 1 accuracy 1 Actions on Google 16 Activation Atlas 1 address validation API 1 Addy Osmani 1 ADK 2 AdMob 32 Ads
A post showing how to convert your dataset to .tfrecords file and later on use it as a part of a computational graph. Introduction In this post we will cover how to convert a dataset into .tfrecord file. Binary files are sometimes easier to use, because you don’t have to specify different directories for images and groundtruth annotations. While storing your data in binary file, you have your data
In this tutorial, we will answer some common questions about autoencoders, and we will cover code examples of the following models: a simple autoencoder based on a fully-connected layer a sparse autoencoder a deep fully-connected autoencoder a deep convolutional autoencoder an image denoising model a sequence-to-sequence autoencoder a variational autoencoder Note: all code examples have been updat
タイトルの通りですが、大規模データをクラスタリングする際には単純なK-Means法ではなく、Mini Batch K-Means法を使うべきという話です。 とある大規模データ(150万件ほどの文章ベクトル)をクラスタリングしたいことがあったのですが、単純にScikit-learnのK-Means法に投げてクラスタリングを走らせていたところ、数時間経っても一向に終わる気配がありませんでした。色々と調べていると、大規模データのクラスタリングにはMini Batch K-Means法を使うべきという記述を見つけました。公式ドキュメントによると、大体1万件を超えるデータをクラスタリングする場合にはMini Batch K-Meansを使うべきとのことです。 APIとしては単純にKMeansをMiniBatchKMeansに置き換えれば動きます。理論的な背景としては、論文 “Web Scale K-
世間の機械学習屋さんは、機械学習・統計解析のライブラリにデータを食わせる時に、どうやってデータを入力しているのだろうか? 話を聞くに、データを一度CSV形式に落とし込んで、それをPythonスクリプトで読み込むというパターンが多いようではある。 ただ、ある程度大量のデータセットをCSVファイルで扱うようになると、いくつか問題点が露わになってくる。 解析すべきデータセットを切り替えるたびに異なるCSVファイルを用意する事になり、ファイルの取り回しが煩雑である。 前処理をかけた後のCSVファイルがまたできてしまい、ファイルの取り回しが更に煩雑になってくる。 最終的にCSVファイルの所在が誰にも分からなくなってしまい、機械学習・統計解析の元になったファイルが散逸してしまう。 そもそも、GB単位のフラットファイルをシェル上でコピーしたり読み込ませたりするのはそれなりに時間を要する処理である。 デー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く