ディープラーニングの解析結果が常に同じ値になります

投稿者: Anonymous 売上個数予想のプログラムを作っていますが、 学習させた後MultiLayerNetwork.output(xxx)させた結果が常に同じ値になり困っています。 事前に学習データをAI.MaxInputStringLength(20)のパラメータに変換済みでそのサンプルが数万個あります。 つまり、入力は20のパラメータがあります。 今回は売上個数の予想なので出力は1つです。 (ディープラーニングは初めてなのでまずはそれっぽい結果が出るだけでよく、モデル構築は勘に近いです) 下記コードは処理を読める程度に必要な部分だけを抜粋しています。 AI.MaxInputStringLength は 入力パラメータ数なので20です。 (Stringとついてますが入力は事前処理しているので文字列ではありません) ニューラルネットワークモデル val modelConfig = NeuralNetConfiguration.Builder() .seed(1142) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .iterations(1000) .learningRate(0.001) //.updater(Updater.NESTEROVS).momentum(0.9) //.regularization(true).l2(1e-4) .list() .layer(0, DenseLayer.Builder() .nIn(MaxInputStringLength) .nOut(500) .activation(Activation.SIGMOID) .weightInit(WeightInit.XAVIER) .build()) var layer = 1 // ↑inputが0だから1から始まる var beforeOutputCount = 500 // ↑inputのアウトプットの数 val middleLayerLength = 100 for (i in 0 until middleLayerLength) { val outputCount =…(Continue Reading)

画像データが格納されたテンソルの扱い方

投稿者: Anonymous TensorFlowで画像処理を行いたい初心者です。 機械学習ネットワークから出力される、64×64の画像20枚分のテンソル[20,64,64,3]に対してある処理を行い、新たなテンソル[20,64,64,1]を求めたいのですが、適切な操作がわからず困っております。 やりたい処理としては、画像一枚の4×4のパッチ領域でRGBチャネル内の一番小さい値を見つけ出し、新たな画像のパッチ領域をその値で埋めてくことを繰り返すというものです。 RGBチャネルそれぞれの値へのアクセスの仕方が分からず手も足も出ません。 ご回答よろしくお願いいたします。 処理について図を描いてみました。 下の図を例とすると、 最初の4×4領域において、RGBのうちGのチャネルが最小値16を有するため、新たな画像の同じ領域は全て16とします。 また、次の4×4領域においては、Bのチャネルが最小6を有するため、新たな画像において値を6とします。 これを繰り返してシングルチャネルの画像20枚分のテンソルを求めていきたいです。 解決 まずカラーチャンネルの次元を縮約することを考えるなら Tensorflowには、reduce関数が定義されています。 これは、あるrankの値を全て何らかの操作で、1つの値にまとめ上げる操作を行うものです。 reduce関数は tf.reduce_xxx(<対象のテンソル>, <reduceする次元>) という形式をしています。 xxxの部分には、どのような操作を行うのかが入り、たとえば tf.reduce_sum, tf.reduce_prod, tf.reduce_mean などが定義されています。 (最新の情報はTensorflowのリファレンスを参照ください) さて今回の場合 tf.reduce_min がまさに対象となる関数です。 具体的には [20,64,64,3] であるテンソルを t と呼ぶことにすると tf.reduce_min(t, 3) により、 [20, 64, 64] なテンソルを得ることが出来ます。 また、 keep_dims=True とすることで、計算後にrank数そのものは落とさず残すことが出来ます。 したがってモノクロ1チャンネルだけにして最後のrankを残したいのであれば tf.reduce_min(t, 3, keep_dims=True) としてみてください。 この場合は [20, 64, 64, 1] なテンソルが得られます。…(Continue Reading)

Word2Vecにおけるマイナスの概念について

投稿者: Anonymous Word2Vecでsimilarityの値がマイナスになるのはどうしてなのでしょうか? たとえば、次のコードを実行した時に、meowが-0.018となり、マイナスになっています。 この場合100次元空間のベクトルの内積ですから、マイナスではなくてプラスになると思っています。 今回はmeowだけでしたが、sizeのパラメーターを変更すると他のものもマイナスになったりします。 ソースコード # sourcecode from gensim.models import Word2Vec sentences = [[“cat”, “say”, “meow”],[“dog”,”say”,”woof”]] model = word2vec.Word2Vec(sentences, min_count=1,size=100) print(model.wv.most_similar(positive=[‘cat’])) # output [(‘woof’, 0.12968875467777252), (‘say’, 0.06406527757644653), (‘dog’, 0.05123840644955635), (‘meow’, -0.01819145306944847)] 参考にしたページ ページ中部のExample https://radimrehurek.com/gensim/models/word2vec.html 解決 今回お使いのライブラリの API ドキュメントによると、most_similar() はコサイン尺度から類似度を判定するようです。コサイン尺度は 2 つのベクトルの内積と符号が同じであり、距離とは異なりマイナスにも成り得ます。特に 2 つのベクトルの成す角が鈍角のときに負値となります。 回答者: Anonymous

syntaxErrorが出ます

投稿者: Anonymous autoencoderで文章を学習したモデルをslackbotでテストしたいと考えています。 しかしながら、 File “/home/yudai/Desktop/keras_test.py”, line 24 loaded_model = model_from json(loaded_model_json) ^ SyntaxError: invalid syntax と出力されます。しかしながら、このコード自体は、合っていそうなので、 他に原因があると考えられますがわかりません。 もしよろしければ、何卒ご教授お願いいたします。 from keras.models import Sequential from keras.layers import Dense from keras.models import model_from_json import json from collections import OrderedDict import MeCab import codecs from slackbot.bot import default_reply from slackbot.bot import Bot import numpy import os import io,…(Continue Reading)

chainerのsoftmax_cross_entropy()について

投稿者: Anonymous pythonとも機械学習とも勉強不足でわからない点があったため、chainerの交差エントロピー誤差を計算するsoftmax_cross_entropy() について質問させてください。 MNISTを識別するサンプルコード https://github.com/pfnet/chainer/blob/master/examples/mnist/train_mnist.py を動かしてみました。 疑問に思った点は以下です。 49行目のreturn F.softmax_cross_entropy(y, t), F.accuracy(y, t) で、多クラス識別をする際の交差エントロピー誤差は、出力層のユニット数分(ラベルに対応するユニットだけでなくほかのユニットの確率も余事象として)計算しなければならないのに、教師データtを1ofK表記にせず、そのまま渡している点。 交差エントロピーは与えられたラベルのユニットだけに関する重みを更新するのでしょうか。 関数内部で1ofK表記、または多ラベル表記に変換しているのかなと考えてソースを見たのですがよくわかりませんでした。どのような処理をしているのかも教えてほしいです。 48行目の y = model.l3(h2) でsoftmax関数を通していない理由は、softmax_cross_entropy() 内で self.y, = Softmax().forward_cpu((x,)) として、関数内でsoftmax関数を適用しているからなのでしょうか そうすると 49行目の return F.softmax_cross_entropy(y, t), F.accuracy(y, t) のyをh2の値を渡してもいい気がするのですがどうなんでしょう(yで線形変換する必要はあるのか) 質問は以上です。 初歩的な質問かもしれませんがよろしくお願いします。 交差エントロピー、多クラス識別について参考にしたブログ http://hshinji.hateblo.jp/entry/2015/05/20/081530 softmax_cross_entropyのReference https://github.com/pfnet/chainer/blob/master/chainer/functions/softmax_cross_entropy.py 解決 こんにちは ご指摘の通り、このFunctionは入力ベクトルxに対してSoftmaxを適用した後、正解ラベルtとの交差エントロピーを取ります。ラベルの数をKとしたとき、xはK次元ベクトルですが、tは1 of K表現ではなく、ラベルのインデックスを整数で表しています。 1について 正解ラベル以外のインデックスに対してはエラー(損失の勾配)が0になるので、エラーを逆伝播する必要がありません。 分布pとqの交差エントロピーは-Σ_i p(i) log q(i)で、今の場合pは、正解ラベルtでp(t)=1で、それ以外の値t’でp(t’)=0という分布です。なので、y=Softmax(x)としyをy=[y1, …, yK]と成分で書くと、交差エントロピーは-log ytとなります。 ある変数zのエラーは損失(今の場合交差エントロピー)をzで微分した値です。今の場合tと異なるt’について、損失-log ytをyt’で偏微分をすると0なので、yt’についてはエラーが発生しません。…(Continue Reading)

Theanoのarangeについて

投稿者: Anonymous Deep Learning Tutorialsのロジスティック回帰を読んでいます。 http://deeplearning.net/tutorial/logreg.html ロジスティック回帰での尤度関数を計算する部分。 -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y]) ここの T.arange についてなのですが Theano の arange は Numpy と同じように0〜nのベクトルを作成するのでしょうか? print T.arange(10) として、配列が作成されるか確認しましたが ARange.0 と出力され、どのように動作しているのかわかりません。 質問したい点は以下です。 – theano.tensor.arangeの動作について – printした際の出力の意味 よろしくお願いします。 解決 基本的な機能は numpy の arange と同じで、始点・終点・増分を指定して array を生成します。 python 組み込み関数である range の numpy 版、theano 版とでも言いましょうか。 numpy.arange document を見てもらえれば分かると思いますが、 >>> np.arange(3) # 長さ 3 の int 型の…(Continue Reading)

pythonで変数が次のコードへ継承されません

投稿者: Anonymous autoencoderで文章を学習したモデルをslackbotでテストしたいと考えています。 しかしながら、 Using TensorFlow backend. Traceback (most recent call last): File “/home/yudai/Desktop/keras_test.py”, line 19, in model = ae(len(word2id)) NameError: name ‘ae’ is not defined keras_AE.pyで学習は可能ですが、次のkeras_test.pyでaeが使えません。 slackbot_setting.pyのせいかと思いましたが、関係ないようです。 slackbotは、てれかさんの クリスマスにもなってカノジョがいないからカノジョを作ってみた。 を参考にいたしました。 原因がわかる方や、これはエラーでは?と思われる方がおられたら何卒ご教授お願いいたします。 追記: No AutoEncoder in keras code?? poem.txtのデータ 朝霧 の 中 に 九段 の ともし 哉 あたたか な 雨 が 降る なり 枯葎 菜の花…(Continue Reading)

MLlibで予測値を「確率」で出す方法

投稿者: Anonymous 以下のページを参考にMLlibを実装したところ、predict関数の返り値が1か-1で、スパムの確率が高いほど1に近くそうでなければ0に近い値が出るというようにはできないようなのですが、MLlibではこのような「確率」を返す関数というのは用意されてないのでしょうか。 なお、NaiveBayesをSVMWithSGDに変えてみてもやはり1か0で超平面からの距離のような連続的な値にはならないようです。 Scala ではじめる Spark / MLlib の単純ベイズ分類器 – ALBERT Engineer Blog 解決 SVMWithSGDについてはわかりました。公式ドキュメントにあるようにデフォルトで設定されているしきい値0をclearThresholdすればpredictでナマの値が出るようになります。 model = SVMWithSGD.train(dataSet, NUM_ITERATIONS) model.clearThreshold() val score = model.predict(point.features)//0.8094…のようなナマの値 回答者: Anonymous

tensorflowのsparse_placeholderのAttributeError

投稿者: Anonymous tensorflowでスパーステンソルのプレースホルダーに関して以下のように定義しました ph = { ‘adj_norm’: tf.sparse_placeholder(tf.float32, name=”adj_mat”), ‘x’: tf.sparse_placeholder(tf.float32, name=”x”)} しかし,以下のようなエラーが出ます. ‘adj_norm’: tf.sparse_placeholder(tf.float32, name=”adj_mat”), AttributeError: module ‘tensorflow’ has no attribute ‘sparse_placeholder’ 色々調べた結果,tensorflowのバージョンの違いが原因と考えられるのですが,そういう場合はどうすればこのエラーを解決することができますか? こちらのtensorflowとpythonのバージョンはtensorflow=2.0.0,python=3.6.1です. 解決 TensorFlow 1のコードをTensorFlow 2で動かしてエラーになっているので、以下のいずれかで解決すると思います。 TensorFlow 2の文法で書き直す TensorFlow 1互換モードで動かす TensorFlow 1にダウングレードする 参考) https://www.tensorflow.org/guide/migrate 簡単そうなところで、 import tensorflow as tf を import tensorflow.compat.v1 as tf tf.disable_v2_behavior() に変えてみたら、動作しませんかね? 回答者: Anonymous

scikit-learn ライブラリを継承した自作クラスのオブジェクト生成時にエラー : TypeError: ‘module’ object is not callable が発生してしまう。又、自身のオブジェクトを表す self が 意図に反して None となってしまう。

投稿者: Anonymous 自作クラスのオブジェクト作成時の挙動と、自身のオブジェクトを表す self の挙動に関して、 以下の2つの不明点があり解決出来ません。 解決方法を教えて頂きたいですm(__)m 1. 1つ目の不明点(自作クラスのオブジェクト生成時の挙動) scikit-learn ライブラリの推定器 estimator の基本クラス sklearn.base.BaseEstimator,sklearn.base.ClassifierMixin を多重継承した、 自作クラス class EnsembleLearningClassifier( BaseEstimator, ClassifierMixin ): を生成する際に、以下のような記述をすると、コンパイルエラーが出てしまう。 エラー内容は、TypeError: ‘module’ object is not callable import EnsembleLearningClassifier ensemble_clf1 = EnsembleLearningClassifier( classifiers = [ pipe1, pipe2, pipe3 ], class_labels = [ “Logistic Regression”, “Decision Tree”, “k-NN” ] ) 以下のようにすると、コンパイルエラーにならない。 import EnsembleLearningClassifier ensemble_clf1 =…(Continue Reading)

訓練済みモデルの使用にはGPUはあまり重要ではない?

投稿者: Anonymous TensorFlowなど機械学習フレームワークを用いて訓練済みモデルを作成した時、そのモデルの使用にもGPU性能は深く関わってくるでしょうか。 また、モデルの使用時に関する用語やベンチマーク、考察などありますでしょうか? 質問の背景 現在、訓練済みモデルを使ってユーザーから送られた画像を解析するWebサービスの作成を考えているのですが、訓練時と同様にGPUパワーが必要になるなら、それ用の構成にしないといけないのかなと疑問に思い質問しました。もちろんどの程度の処理能が必要かによっていくらでも変わってくる話だと思いますが、恥ずかしながら全くの無知なので、とりあえず感触としてどんなものかを知りたいと思い質問しました。 解決 訓練(学習)と推論があり、提示されているのは、推論に関することだと思います。 一般に、推論のほうが処理が軽く、 また、学習は例えば32ビットの精度での計算が必要であるが、推論は16ビットや8ビットでの計算でも 問題ないことが示されています。(←この一文は、あまり本件と関係ないかも。学習と推論でかなり違うと いうことを示したかっただけ。) H/Wに関しては、CPU、GPU、FPGA、ASIC等があるとして、 例えば、マイクロソフトのAzureとかは、FPGAとかも使っているはずです。 Googleは、TPUという自社開発のASICも使い始めているのではないでしょうか。 よって、GPU一色ではないと思います。 ただ、独自のH/Wを準備されるのであれば、いまの段階では、GPUが無難な気もします。 また、小規模であれば、推論は、CPUでも十分な場合があるとも思います。 回答者: Anonymous

DataFrameを用いてカテゴリカル変数を1特徴量の量的変数に変換する方法

投稿者: Anonymous 後述のようなsample.csvを読み込んだDataFrame dfがあったときに、カテゴリカルな変数であるresidenceに一位のラベルを自動的にふるよい方法があれば教えてください。 pandas.get_dummies(df)を用いるとそれっぽいことができなくはないですが、東京カラム、神奈川カラム、、、などと特徴量の変数の数だけ、新しい特徴量ができ、それらが0,1になってしまいます。 やりたいこととは異なります。 また、mapを用いて df.map({“東京”:1, “神奈川”:2,,,}) とすれば、求めたい形にはなりますが、自分で対応関係を辞書で手動定義する必要があり面倒です。 csvはあくまでも例なので実際に使いたいデータとは異なりますが、 自動でふる良い方法があれば教えてください。 sample.csv name,residence 安倍,東京 野田,神奈川 菅,千葉 鳩山,埼玉 麻生,神奈川 ,,, 伊藤,沖縄 ↑1000行くらいある こういう風にしたい name,residence 安倍,1 野田,2 菅,3 鳩山,4 麻生,2 ,,, 伊藤,47 東京は1, 神奈川は2, 千葉は3, 埼玉は4, 沖縄は47など。 解決 residence列を category型のデータに変換して, カテゴリーコードを取り出せばよろしいかと思います。 df[‘residence’] = df[‘residence’].astype(‘category’) df[‘residence_code’] = df[‘residence’].cat.codes 今回のように単に文字列を数値に変換したい場合は df[‘residence’] = df[‘residence’].astype(‘category’).cat.codes で良いかもしれません。 回答者: Anonymous

協調フィルタリングにおける、アイテムベースとユーザーベースの区別方法

投稿者: Anonymous レコメンドシステムの協調フィルタリングでアイテムベースとユーザーベースの違いがわからないので質問します。 ぐぐってみると、あるページではアイテムベースと紹介されてるような内容が、他のページではユーザーベースだったり、その逆だったりがあります。 この2つを区別する要素を教えていただきたいのと、できれば下記の例で説明していただきたいです。 下記の例でアイテムベースが、この認識であってるかどうかもちょっと自信がないです。 実際のサービスで使うのとかけ離れた少ないデータでの例になってるのはご了承ください。 (例)アマゾンでの本のレコメンド 1.アイテムベース インプット Aさんはジャンプ、マガジン、コロコロを買っている Bさんはジャンプ、マガジンを買っている アウトプット AさんとBさんは、買う雑誌の傾向が似ている だから、Bさんにコロコロをレコメンドしよう 2.ユーザーベース インプット どういうインプットかわからない アウトプット BさんにXXをレコメンドしよう 解決 Asuka さんが質問文で例に挙げている「アイテムベース」の例は、むしろユーザーベースの例だと思います。 ユーザーベース vs アイテムベース ユーザーベース協調フィルタリングでは、どのユーザーがどのアイテムを買ったかを元に、ユーザー×アイテムの表をデータベースとして持っています。そして新しいユーザー A が商品を買ったとき、どのアイテムを推薦するべきかを A さんと似た購入履歴を持つ ユーザー を探すことで決めます。ユーザー間の関係性をもとに推薦アイテムを決めているので、ユーザーベースです。 対してアイテムベース協調フィルタリングでは、どのユーザーがどのアイテムを買ったかを元に、アイテム間の類似性を示すアイテム×アイテムの表をデータベースとして持っています。そして新しいユーザーが商品 X を買ったとき、どのアイテムを推薦するべきかを X と関連の高い アイテム を探すことで決めます。アイテム間の関係性をもとに推薦アイテムを決めているので、アイテムベースです。 参考 英語でよければ、くだけた説明としては Wikipedia:en の “Collaborative filtering – Methodology” が分かりやすいと思います。また、アイテムベース協調フィルタリングを提案した最初の論文であると言われている Sarwar らの “Item-based collaborative filtering recommendation…(Continue Reading)

NameError: name ‘xrange’ is not defined — CIFAR-10を使ったクラスわけでエラー, Python2.7.12

投稿者: Anonymous 以下のリンクにあるCIFAR-10(ラベル付されたサイズが32×32のカラー画像8000万枚のデータセット)を読み取り、Nearest Neighbor Classifierによりクラス分けしその精度を%で出力させたいのですが以下のエラー出てしまいました。問題は58行目のxrangeにあるようですが解決方法がみつからず、何かアドバイス頂けると幸いです。 以下データ元: http://www.cs.toronto.edu/~kriz/cifar.html 以下コードです: import pickle import numpy as np import os def unpickle(file): fo = open(file, ‘rb’) u = pickle._Unpickler(fo) u.encoding = ‘latin1′ dict = u.load() fo.close() return dict def conv_data2image(data): return np.rollaxis(data.reshape((3,32,32)),0,3) def get_cifar10(folder): tr_data = np.empty((0,32*32*3)) tr_labels = np.empty(1) ”’ 32x32x3 ”’ for i in range(1,6): fname =…(Continue Reading)

教師あり学習と教師なし学習の違いは何ですか?

投稿者: user4410 何冊か本を読んだのですが、抽象的ではっきりした理解を得ることができませんでした。 具体的な例を教えていだだけますか 解決 概念的に言うと、 教師あり学習: 人間等が付けたラベルによって、教えられた構造を学び取る 教師なし学習: データから規則性を発見して学び取る という違いになると思います。 もう少し具体的に、0から9までの数字1文字が書かれた画像が沢山あるとしましょう。 この画像一枚一枚に、0から9までのどの数字が書かれているのかというラベルを人間が付けて、それを学習するのが教師あり学習です。 アルゴリズムが、人間の認識を真似るように学習が行われます。 学習が完了した暁には、新しい入力画像に対して、どの数字が書かれているのかを正しく判断できるようになります。 一方で教師なし学習の場合は、画像データがあるだけです。 学習アルゴリズムは、このデータだけをみてこのデータの性質を探ります。 すると、大体0から9までの10種類のパターンに大きく分けることができます。 このようにデータだけからその規則性を学び取るのが教師なし学習です。 回答者: Anonymous

TensorFlow object detection api SSD 転移学習: クラス数を変化させた時に学習済みモデルを使ったクラス層の重みの初期化はどのように行われているのか

投稿者: Anonymous Tensorflow object detection api でSSDモデルを学習させる時、fine-tune checkpointとして学習済みモデルを指定できますが、 feature-extractor にしか学習済みの重みは反映されず、feature-map 内の localization層と classification層の重みは初期化されているようでした。feature-map にも学習済み重みを反映するにはどうすれば良いでしょうか。 自由にクラス数を指定できるものの、クラス数を変えた結果変化するモデルの classification層の形に合わせてどのように重みを載せているのかわかりませんでした。 どのような仕組みになっているのでしょうか。 例えば、様々な車を識別するモデルを作る際には、MSCOCOで学習済みのモデルで feature-extractor だけではなく feature-map の localization層全てと、classification層の該当するクラスの重みのうち車に該当する重みのみを使ってモデルの重みを初期化してから転移学習をスタートさせたほうが効率が良いと考えています。ただしモデルの作り的に位置の予測数(8732)×クラス数分パラメーターを用意しないといけないため、このクラス数が変化するとモデルの形も変わるので重みを学習済みモデルから素直に乗せることができないと思っています。 解決 https://github.com/tensorflow/models/blob/master/research/object_detection/utils/variables_helper.py#L133 ソース内で該当するコードがありました。基本的に学習済みモデルの層と新しく作るモデルの層で名前が一致するものを比較して、同じ形だったら重みを保持しておくという処理なので、クラス数を変えてclassification層の形が変わると重みが初期化されてしまうという仕様でした。 回答者: Anonymous

Rの{e1071}パッケージの関数 tune.svm() を利用して、C-SVM(ソフトマージンSVM)のパラメータ C をグリッドサーチでチューニングする際のグリッドサーチ結果の作図について

投稿者: Anonymous {e1071}パッケージのtune.svm()を利用して、C-SVM(ソフトマージンSVM)の C 値のチューニングをグリッドサーチにかけて見つけようとしているのですが、グリッドサーチ結果の図がうまく作成出来ません。 tune.svm()を利用してのグリッドサージ結果の作図をご教示して頂けると助かりますm(__)m <170305追記> 尚、作成したいグラフは以下のような種類のグラフです tune.svm()を含む Wrapper Functions のヘルプ https://www.rdocumentation.org/packages/e1071/versions/1.6-8/topics/tune.wrapper <170317追記> 参考サイト http://d.hatena.ne.jp/hoxo_m/20110325/p1 https://bi.biopapyrus.net/machine-learning/svm/e1071.html 以下作成中のコードです。 #install.packages(“kernlab”) #install.packages(“e1071”) # expand lib on memory library( MASS ) # MASS package library( kernlab ) # use C-SVM function library( e1071 ) # grid serch of C-SVM ############################ # set Pima data # ############################ # Pima…(Continue Reading)

Deep MNIST for Expertsを参考しながら、オリジナルの色のついた画像を六個のクラスに分類できるようにするには

投稿者: Anonymous 下記のコードはオリジナルの画像データセットをTensorFlowのチュートリアルDeep MNIST for Expertsを参考しながら、色のついた画像を六個のクラスに分類できるようにしたかったもですが ValueError: Cannot feed value of shape (50, 784) for Tensor ‘Placeholder_15:0’, which has shape ‘(?, 2352)’ というエラーが出てしまいます。 チュートリアルと違って分類するクラスの数や色のついた画像といったところを変えようとは思っているんですがうまくいきません。 教えてもらえればありがたいです。 参照:files = os.listdir('./data/' + d)でのエラーについて 環境:os → macOS10.12.5 python → Python 3.6.1 |Anaconda 4.4.0 (x86_64) tensorflow → tensorflow (1.3.0) import tensorflow as tf import os import numpy as np import cv2 NUM_CLASSES = 6 #分類するクラス数…(Continue Reading)

訓練データとして用いるため、英語で記された景気についてのアンケート調査のデータを入手したい

投稿者: Anonymous プログラミングについての質問とは少しずれているかと思うのですが、ご了承ください。 日本では内閣府が公開している景気ウォッチャー調査といった景気に敏感な人たちを対象とした景気に対する評価(5段階)とその理由のアンケートのファイルがあります。 このアンケートのアメリカ版のようなファイルが欲しいです。つまり、景気に対する評価とその理由が英語で記載されているようなファイルです。 このファイルの用途は、評価を訓練データ教師ラベルとし、その理由を訓練データとしてポジネガ判定の教師データと考えています。 このようなファイルが公開されているサイトを教えてくださいませんか。 理想は以上のように評価とその理由が英語で記載してあるCSVファイル等です。 よろしくお願い致します。 解決 以下のあたりが該当すると思われます。 教師データとして使えるかどうかは分かりませんが。 The Conference Boardから有料のようですが 概要解説:What is the BCI Database and Internet Service? 元データリンク:Links to Online Sources of U.S. BCI Data 要約?:Global Business Cycle Indicators 月次に解説:Economics Watch Reports|All Publications 最新刊?:The Conference Board Economics Watch® Economic Series Report American Institute for Economic Researchから Business Conditions Monthly…(Continue Reading)

Pythonで、libjpegをインストールする方法が分かりません。

投稿者: Anonymous エラーは以下のようになっています。 RuntimeError Traceback (most recent call last) <ipython-input-163-bc99f0644372> in <module>() 2 import matplotlib.pyplot as plt 3 —-> 4 people=fetch_lfw_people(min_faces_per_person=20,resize=0.7) 5 image_shape=people.images[0].shape 6 ~Anaconda32libsite-packagessklearndatasetslfw.py in fetch_lfw_people(data_home, funneled, resize, min_faces_per_person, color, slice_, download_if_missing) 332 faces, target, target_names = load_func( 333 data_folder_path, resize=resize, –> 334 min_faces_per_person=min_faces_per_person, color=color, slice_=slice_) 335 336 # pack the results as a…(Continue Reading)

R言語で、判別分析(LDA)を用いた画像データの2値化法を実行する際の MASS パッケージの関数 lda() の使用法について

投稿者: Anonymous R言語にて、判別分析(LDA)を用いてグレースケールの画像データを2値化画像するコードを検討中です。 これを実現するにあたり、MASSパッケージのlda()関数を使用しようと考えてるのですが、lda()関数使用時エラーが発生し、その原因が分かりません。このエラーの意味と対策を教えて頂きたいですm(__)m lda()関数のヘルプファイル: https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/lda.html 変換対象画像ファイル(グレースケール) 以下、実装中コードです。 #install.packages(“lda”) #install.packages(“jpeg”) # expand lib on memory library( MASS ) # MASS package library( jpeg ) # jpeg画像の読み込み # set options options( digits=7 ) # 表示桁数 # load image data (jpeg) jpeg_NekoSensei <- readJPEG( “nekosensei_greyscale.jpg” ) # 560*420 = 235200 pixel class( jpeg_NekoSensei ) # 3次元配列 um[1:420,…(Continue Reading)

R言語の外積演算関数 outer() を利用して、任意の自作関数(ガウス核関数 GaussianKernel() )の z軸の値を求める際の関数の挙動について

投稿者: Anonymous R言語の外積演算関数 outer()を利用してガウス核関数の3次元の図の作図を行なおうとしているのですが、outer()関数呼び出し後の自作関数 GaussianKernel()の挙動が理解できずエラーが発生してしまいます。その結果scatterplot3dパッケージの3次元作図関数scatterplot3d()でもエラーが発生してしまいます。 このRコードでのouter()関数、及びscatterplot3d()の挙動、及び対策案を教えて頂きたく存じますm(__)m 以下、実装中のRコードです。 library( MASS ) # MASS package library( kernlab ) # library( scatterplot3d ) # scatterplot3d関数を使用 ######################### # set gauss kernel ######################### #————————————————————— # GaussianKernel() # [in] # x1 : [vector] input data x1-axis # x2 : [vector] input data x2-axis # alpha : [scaler] constant value # mean…(Continue Reading)

ChainerのTrainer実行時にエラーが出る

投稿者: user20725 Chainerを利用して、15入力3出力のニューラルネットワークを作成しようと思い、以下のコードを書きました。 # -*- coding:utf-8 -*- import numpy as np import chainer from chainer.datasets import tuple_dataset from chainer import Variable from chainer import Function, gradient_check, report, training, utils, Variable from chainer import datasets, iterators, optimizers, serializers from chainer import Link, Chain, ChainList import chainer.functions as F import chainer.links as L from chainer.training import extensions…(Continue Reading)

要素がlist型であるpandasのdataframeをndarrayの2次元配列にしたい

投稿者: Anonymous dataframe e.g) date vec 2019-01-04 [-0.08072768, -0.061041858, 0.09872102] 2019-01-04 [-0.07853928, -0.058681224, 0.10971683] こういったdataframeがあった場合に、列vecのみ取り出し、変換して(2,3)の2次元ndarrayに変換したいのですが、うまく行きません。 実行環境: python 3.7.3 できれば、pythonの方でfor文回して、dataframe 1行ずつとって、concatenateするような方法は避けたいです。。 試したこと: df = df[‘vec’] array = df.values これだと、arrayには(3,)のベクトルがつ連続するという型になってしまいます。 なのでarray.shapeの出力は(2,),array[0].shapeの出力は(3,)のようになってしまいます。 解決 array = np.vstack(df.vec) により解決できました。 回答者: Anonymous

LSTMをPythonで

投稿者: Anonymous 最近、RNNについて勉強しています。今ちょうど、LSTMについて勉強しているところなのですが、tensorflowやkerasの使い方はなんとなく分かるけれど応用できるほどの技量はないので、イメージを膨らますためにもとりあえずPythonのnumpyのみでコードを書いてみようと思いました。一応、入出力ゲート、忘却ゲート、CEC、覗き穴結合などを搭載した自作LSTMを作ってみたのですが、うまく動きません。うまく動かないというのは、出力がnanになってしまいます。多分、重みを更新する際にすでに重み自体がnanになっているのではないかと考えられます。そこで、以下のコードで怪しい点などありますか?(個人の見解としては誤差逆伝播あたりが原因な気がしてます。) また、そもそもtensorflowなどを使わないのは無謀ですか?そこらへんまだよくわからないので教えていただきたいです。 —コードについて— alpha、gammaは学習率、equation()はy=xの線形変換をしてるだけなので意味はないです。(見やすかったので…)tanhとSigmoidの微分は頭にdをつけてます。また、各行列の宣言は行っていますが、長くなるので省きました。重みの初期値は平均0、標準偏差0.1の正規分布です。バイアスの初期値は0行列です。 コード #input gate i_[:, t] = np.dot(w[0, t, :, :], x[:, t]) + np.dot(u[0, t, :, :], h[:, t-1]) + np.dot(v[0, t, :, :], c[:, t-1]) + b[0, :, t] i[:, t] = Sigmoid(i_[:, t]) #forget gate f_[:, t] = np.dot(w[2, t, :, :] , x[:, t]) + np.dot(u[2,…(Continue Reading)

ディープラーニングで出力される予想が常に一定の値

投稿者: Anonymous ディープラーニングはかなり駆け出しです。 機械学習については基礎の基礎を勉強した程度の無知です。 ディープラーニングで時系列の予想を行いたいのですが何をしても出力結果がほぼ一定の値になってしまします。 層の数を大きく変えても、活性化関数を見直して試行錯誤しても 学習後のモデルに何を渡してもほぼ一定の値を返すようになってしまいます。 下記のコードや説明を見て間違っている部分ありましたら指摘いただきたいです。 やりたいこと 時系列株の予想(上昇、変わらず、下落 の3パターン) 過去20日のデータを元に今後数日以内に上昇、変わらず、下落を予想 deeplearning4jを使用(時系列は再帰型ニューラルネットワークを使用すると良い?) 入力と出力 入力データのshapeは、[numExamples,inputSize,timeSeriesLength] 現在学習はfitメソッドで1セットずつ行っているためnumExamplesは1 inputSizeは時系列の日数である20 timeSeriesLengthは時系列のパラメータで私の場合 始値、終値、独自のデータの3つ分なので3 独自データとは、アルゴリズム考えるのが得意なので機械学習ではない方法で発見したアルゴリズムで計算したデータです。 その日のとある変化を示し、将来の株価上下に明らかな関連性があるデータです。 (なので実際、機械学習しなくてもいいのですが誤差を除去したりしたいので) 出力データのshapeは、[numExamples,outputSize,timeSeriesLength] timeSeriesLengthは上記入力で説明したとおり1 outputSizeは3(上昇、変わらず、下落の3パターンを予測したいので) timeSeriesLengthは上記入力と合わせる必要があるみたいなので仕方なく20 本来はアウトプットは1次元3要素であればいいのですが、、、 定数(試行錯誤中で全体的にコード整ってなくてすいません) // 【A】過去 解析データ // 入力データの数(シグナルの点灯、解析自体はこの日数に関係しない あくまで入力データ数) const val analyzeDays = 20 // 【B】未来 検知の有効期限 // シグナル検知後、何日後までの株価上下を当たりとするか const val signalLimitDays = 10 const val numInputs = 3 //const val numHiddenNodes = 1000…(Continue Reading)

sklearnのTfidfVectorizerについて

投稿者: Anonymous sklearnでKMeansを利用しようと考えています。 https://github.com/luispedro/BuildingMachineLearningSystemsWithPython/blob/master/ch03/rel_post_20news.py 上記のサンプルを参考にしています。 上記サンプルのL58でTfidfVectorizer.fit_transform()で学習データをベクトル化し、L91で新しいクラスタリング対象のデータをTfidfVectorizer.transform()でベクトル化しています。 これは、必ずfit_transform()を呼び出してからtransform()を呼びださなければならないのでしょうか。 もしそうなら、fit_transform()した状態を保存しておき新しい対象に対してはfit_transform()を省略することはできるでしょうか。 解決 学習データのベクトル化と、新しいデータのベクトル化は独立した操作なので、必ずしもfit_transform()を呼び出してからtransform()を呼びなさないといけないわけではありません。fit_transform()で作られたベクトルをディスクに保存しておけば、後からロードすることができます。 vectorizedの型はscipy.sparse.csr.csr_matrixなので.toarray()でnumpyの形式に変換してから保存すればいいと思います。復元はその逆の操作になります。 import numpy import scipy.sparse.csr # vectorizedはgithubの例にあるようにvectorizer.fit_transform(…)で得られたもの # 保存 numpy.save(‘my_vector’, vectorized.toarray()) # 復元 なぜかファイル名は拡張子をつけないとロードできない vectorized2 = scipy.sparse.csr.csr_matrix(numpy.load(‘my_vector.npy’)) # 値の同一性の確認 print (vectorized.toarray() == vectorized2.toarray()).all() 回答者: Anonymous

深層学習: 過学習について

投稿者: Anonymous 現在、CNNのモデル3層レイヤ程度の小規模なもの(しかし各層でもつフィルタ数は多い)に対し、データ数(500枚程度)で学習させた結果認識率が100%(エラー0%)という結果になりました。データ数や、それに対するネットワークの複雑性から過学習が引き起こされました。これについて調べ、検証データを使用し学習と検証の曲線を調べればわかるということでした。 質問は、 ・検証データとはハイパーパラメータが正しいか確認するものであり、それはどのようにして行われるのか。 ・検証と学習データの曲線の離れ具合をみたとき、これは本来一致するべき(どのデータでやっても汎化性能は変わらないとかんがえられるから。)であるという認識でよろしかったのでしょうか。 わからないことが多く、また非常に拙い文章で申し訳ないのですが、ご回答いただけと大変感謝します。 解決 検証データは基本的にハイパーパラメータが正しいか確認するためのものではありません。どのハイパーパラメータの値が最も良いかを探索するために用いられます。すなわち、複数のハイパーパラメータでモデルをそれぞれ学習させ認識精度を比較することで、最も適合するハイパーパラメータを探索するためのデータとして用いられます。 学習による認識モデルは学習を繰り返すと学習データに対して認識精度が100%になるものの、学習データに含まれていない未知のデータに対しては認識精度が学習の途中のモデルよりもむしろ悪くなってしまうという現象が起こります。これを過学習といいます。特にCNNを含むNNのモデルは表現能力が高く、学習データに対して容易に過学習を起こしてしまいます。 このため、認識モデルの学習は過学習が始まる前に打ち切るのが基本となります。 実際は学習のイテレーションを回しながら随時モデルを保存しておき、十分と思われる回数学習させた後に、検証データに対する認識精度が最大となるモデルを保存したモデルの中から抜き出して最終的な学習済みモデルとすることが一般的です。 そして最終的な認識精度の算出は、学習データでも検証データでもなく、テストデータに対して認識を行った結果から行います。 テストデータではなく、検証データに対して認識精度が最大になるモデルを抜き出すのは、抜き出すモデルがテストデータに対して過学習することを防ぐためです。 学習のイテレーションの途中で保存したモデルの中から特定のデータに対して認識精度が高いようなモデルを抜き出すことは、そのデータに対する学習の一種と考えることができます。この学習時にテストデータを用いることは学習データとテストデータを分離できていないということになり、好ましくありません(大前提として、学習用のデータとテスト用のデータは完全に分離することが必須です。こうしておかなければ、テストデータに対して過学習したモデルが最も認識精度の高いモデルということになってしまい、テストデータに対する正しい認識精度を計算することができなくなります)。かと言って学習データで打ち切りのタイミングを見計らうことはできません(学習データに対して過学習したモデルが最も認識精度の高いモデルということになってしまいます)。そこで学習データともテストデータとも異なる検証データを用意するわけです。 ハイパーパラメータの探索にも同じことが言えます(ハイパーパラメータの探索は学習の一種と考えることができる)。どのハイパーパラメータが良いパラメータなのかを判別するためにテストデータではなく検証データを用いるというわけです。 学習データに対する認識精度の曲線と検証データに対する認識精度の曲線は基本的に一致しないと考えたほうが良いと思います。これは学習データにのみたまたま偏って現れた特徴をモデルが学習する場合がありえるためです。 回答者: Anonymous

他クラス線形回帰に対する最急降下法

投稿者: user28277 タイトル通り線形回帰に対して最急降下法を行いました。もちろん解析的に解は出せるんですが、それはここでは置いておいてください。 目的関数は $$ frac{1}{2} | Xb – y |_2^2 $$ であり、その勾配は $$ X^T X b – X^T y $$ となります。これを用いて最急降下法を行いましたが、最小化されません。むしろコストが上がっていきます。 import pandas as pd import numpy as np data = pd.read_csv(‘https://raw.githubusercontent.com/mubaris/potential-enigma/master/student.csv’) x = data[‘Math’].values y = data[‘Reading’].values z = data[‘Writing’].values def costf(X, y, param): return np.sum((X.dot(param) – y) ** 2)/2. interc = np.ones(1000)…(Continue Reading)

ベイズ最適化と遺伝的アルゴリズムと強化学習の違い

投稿者: Anonymous これらの最適化にかかる時間, 最適化の拡張性の違いはなんですか? またそれぞれの強みはなんですか? ※拡張性は例えば値のみしか最適化できないなど 解決 強化学習は、問題設定の話です。世界を、(状態, 行動) -> (報酬, 状態) な関数であるとみたてて、過去と現在の状態たちとこれまでの報酬から、 next action を決定する関数をどう定めると良いか、で定式化される問題です。 ベイズ最適化は、端的に言えば、「ベイズの確率論で最適化しましょう」という最適化技法の話です。 遺伝的アルゴリズムは、「最適化対象物をデータ構造化し、評価の良い個体は、そのデータ構造を少し変異させるか(mutation)、他の良い個体のデータ構造の適当なパーツを自分のパーツと交換することで(交差)、さらに評価が高くなる可能性が高い。」という仮定の下、適者(評価値の高い個体)生存と変異・交差を交互に繰り返すことで、最適化を行う手法です。 個人的には、遺伝的アルゴリズムは進化計算の一種であると思っています。適者生存と、なにかしらの変異を交互に繰替えすことによって特徴付けられると思っています。その変異に相当するところに、遺伝子の変異と交差相当のデータ操作を加えるものを遺伝的アルゴリズムという、という理解です。 ここまでの説明をした上で、これらは単純には比較不能なものだと思っており、これより詳細な何かしらを説明しようとする場合には、より問題設定を明確化する必要があると思っています。 回答者: Anonymous