質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Elixir

Elixirは、並列処理や関数型に特化した、Erlang VM (BEAM) 上で動作する汎用プログラミング言語です。分散システム、耐障害性、ソフトリアルタイムシステムなどの機能を持ちます。

Q&A

解決済

1回答

2774閲覧

Elixirとkerasについてです。

Hayato1201

総合スコア231

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Elixir

Elixirは、並列処理や関数型に特化した、Erlang VM (BEAM) 上で動作する汎用プログラミング言語です。分散システム、耐障害性、ソフトリアルタイムシステムなどの機能を持ちます。

0グッド

0クリップ

投稿2018/02/24 13:18

編集2018/02/25 08:18

kerasでの処理を速くしようと思い、このサイト
https://qiita.com/piacere/items/c1af7b6ce472db83cff6
に従って行っているのですが、Pythonを呼び出す部分でエラーになりました。。。
③ElixirからPythonを呼び出すの部分で
iex -S mix
以上の様に入力すると、
Erlang/OTP 20 [erts-9.2.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

** (Mix) "mix" with no arguments must be executed in a directory with a mix.exs file

Usage: mix [task]

Examples:

mix - Invokes the default task (mix run) in a project mix new PATH - Creates a new Elixir project at the given path mix help - Lists all available tasks mix help TASK - Prints documentation for a given task

The --help and --version flags can be given instead of a task for usage and versioning information.

この様なエラーが出ます。これはどういうことでしょうか?

_____________________________

追記です

回答ありがとうございます!!

確かにディレクトリの位置を間違えてはいた様です。pyex.exを作ったディレクトリではなくその上のlibやmix.exsがあるディレクトリで実行するべきだったという事ですね?そこで今回そこのディレクトリで行ったのですが、次の様なエラーが出ました・・・これはどういう事でしょうか?
Erlang/OTP 20 [erts-9.2.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

===> Uncaught error in rebar_core. Run with DEBUG=1 to see stacktrace or consult rebar3.crashdump
===> When submitting a bug report, please include the output of rebar3 report "your command"
** (Mix) Could not compile dependency :erlport, "/Users/tmsmac/.mix/rebar3 bare compile --paths "/Users/tmsmac/Google ドライブ/Elixir/pyex/_build/dev/lib/*/ebin"" command failed. You can recompile this dependency with "mix deps.compile erlport", update it with "mix deps.update erlport" or clean it with "mix deps.clean erlport"


さらに追記です

早速の返信ありがとうございます!!
確かにGoogleドライブから出たところに作り直したらこのエラーがなくなりました。。。ディレクトリの名前なんかでエラーが出ることがあるんですね、、、これは日本語のディレクトリ内からは実行できないものなんでしょうか?結構不便ですね。
また、さらにそこで実行したところ関数名を入力するところまで行ったのですが、ここで今度は以下の様なエラーが出ました。今度はどうすればいいのでしょうか??

I'm Python...receive 3
received from python: 30
** (UndefinedFunctionError) function :python.stop/0 is undefined or private. Did you mean one of:

* stop/1 (erlport) :python.stop()

ーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記です

今度はiex> Pyex.predict()で以下のようなエラーが出てしまいました。
** (ErlangError) Erlang error: {:python, :"exceptions.ImportError", 'No module named keras.models', [{"/Users/tmsmac/pyex/lib/py_predict_sin.py", 2, "<module>", "from keras.models import Sequential"}, {"/Users/tmsmac/pyex/_build/dev/lib/erlport/priv/python2/erlport/erlang.py", 226, "_incoming_call", "f = import(module, {}, {}, [objects[0]])"}, {"/Users/tmsmac/pyex/_build/dev/lib/erlport/priv/python2/erlport/erlang.py", 234, "_call_with_error_handler", "function(*args)"}]}
(erlport) /Users/tmsmac/pyex/deps/erlport/src/erlport.erl:234: :erlport.call/3
(pyex) lib/pyex.ex:27: Pyex.predict/0

keras単品では動いています。また、pyex.exのコンパイルも通っています。これも上記で修正していただいたようにファイルにpy_をつけたりstopの部分を変えたりしましたがそれでもダメだったので何か他の原因でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

"mix" with no arguments must be executed in a directory with a mix.exs file

これはカレントディレクトリに mix.exs ファイルがないという意味のエラーです。

mix.exs ファイルは mix new コマンドで作られます。①Elixirを使えるようにするのところで mix new コマンドを実行していないか、実行はしたものの、そのElixirプロジェクトのディレクトリへ cd するのを忘れているか、どちらかのように思えます。

このコラム内では、/code/配下に「pyex」というプロジェクトを作成した想定とします

と書かれていますので、その通りやるなら以下のようになります(手順通りに Docker を使用してる場合)

# cd /code # mix new pyex # cd /code/pyex (Elixir側「ErlPort」のインストールに従って mix.exs を編集) (編集できたら以下のコマンドを実行) # mix deps.get (Python側「ErlPort」のインストールに従って以下のコマンドを実行) # pip install erlport (あとは、③ElixirからPythonを呼び出すに書かれているコマンドを実行する)

追記1

pyex.exを作ったディレクトリではなくその上のlibやmix.exsがあるディレクトリで実行するべきだったという事ですね?

はい。そうです。

** (Mix) Could not compile dependency :erlport, "/Users/tmsmac/.mix/rebar3 bare compile --paths "/Users/tmsmac/Google ドライブ/Elixir/pyex/_build/dev/lib/*/ebin"" command failed.

このエラーは erlport パッケージを rebar3 というツールでビルドしようとしたが、失敗したという内容です。どういう理由で失敗したか表示されてないので困りますね。

こちらで試したところ、Elixir のプロジェクトを日本語のディレクトリ配下に置くと同じエラーが起こりました。試しに pyex ディレクトリを、別の、パスに日本語が含まれていない場所に移動して、再度、iex -S mix を実行してください。

$ docker run -it --rm -v $HOME/code:/code elixir bash root@df4a64a9ce1d:/# apt update root@df4a64a9ce1d:/# apt install python python-pip root@df4a64a9ce1d:/# pip install erlport root@df4a64a9ce1d:/# cd /code/pyex root@df4a64a9ce1d:/code/pyex# mix deps.clean --all * Cleaning erlport root@df4a64a9ce1d:/code/pyex# cd /code root@df4a64a9ce1d:/code# mkdir 'google drive' root@df4a64a9ce1d:/code# mkdir 'google ドライブ' root@df4a64a9ce1d:/code# cp -rp pyex google\ drive/ root@df4a64a9ce1d:/code# cp -rp pyex google\ ドライブ/ root@df4a64a9ce1d:/code# cd google\ drive/pyex/ root@df4a64a9ce1d:/code/google drive/pyex# mix deps.get Resolving Hex dependencies... Dependency resolution completed: erlport 0.9.8 * Getting erlport (Hex package) root@df4a64a9ce1d:/code/google drive/pyex# iex -S mix Erlang/OTP 20 [erts-9.2.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] ===> Compiling erlport Compiling 1 file (.ex) Generated pyex app Interactive Elixir (1.6.1) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> ^g User switch command --> q root@df4a64a9ce1d:/code/google drive/pyex# cd ../../google\ ドライブ/pyex/ root@df4a64a9ce1d:/code/google ドライブ/pyex# mix deps.get Resolving Hex dependencies... Dependency resolution completed: erlport 0.9.8 * Getting erlport (Hex package) root@df4a64a9ce1d:/code/google ドライブ/pyex# iex -S mix Erlang/OTP 20 [erts-9.2.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] ===> Uncaught error in rebar_core. Run with DEBUG=1 to see stacktrace or consult rebar3.crashdump ===> When submitting a bug report, please include the output of `rebar3 report "your command"` ** (Mix) Could not compile dependency :erlport, "/root/.mix/rebar3 bare compile --paths "/code/google ドライブ/pyex/_build/dev/lib/*/ebin"" command failed. You can recompile this dependency with "mix deps.compile erlport", update it with "mix deps.update erlport" or clean it with "mix deps.clean erlport" root@df4a64a9ce1d:/code/google ドライブ/pyex#

あと、いままでのエラーとは関係ないのですが、Qiita の記事の③ElixirからPythonを呼び出すの部分でファイル名などの間違いを見つけたので、記事に対する編集リクエストを提出しました。こちらの編集リクエストで左に赤線が表示されている内容は緑線の内容に変更する必要がありますので注意してください。

修正内容

  • ファイル名 lib/sample.py → lib/py_sample.py
  • Elixir コード中の :python.stop:python.stop( py_exec )

追記2

:python, :"exceptions.ImportError", 'No module named keras.models', [{"/Users/tmsmac/pyex/lib/py_predict_sin.py"

これは Python 側のエラーですね。内容は python が py_predict_sin.py を実行しようとしたところ、keras.modelsモジュールが見つからなかった。

おそらくお使いのマシンに Python の環境がいくつかインストールされていて、pyex.ex で :python.start( [ python_path: 'lib' ] ) を呼んだ時に使われる Python 環境が、keras単品で動かす時の Python 環境とは違うのだと思います。(keras 用でないので keras を見つけられない)

keras単品で動かす前に実行するコマンドはありますか?(例:activate 環境名) もしあるなら、そのコマンドを実行してから、iex -P mix を実行してください。

もしそれでも直らないようなら以下も試してください。

$ kerasを動かす前に実行するコマンド(例:`activate 環境名`)を実行 $ which python ここに Python インタープリタへの path が表示される(例: `/Users/tmsmac/anaconda/envs/myenv/bin/python`)

Python への path がわかったら、pyex.ex の :python.start( [ python_path: 'lib' ] ) に以下のように python: ... オプションを追加する。

elixir

1 def predict() do 2 { :ok, py_exec } = :python.start( [ python: '上で調べたPythonインタープリタへのpath', 3 python_path: 'lib' ] )

iex で recompile してから Pyex.predict() を再度実行する。

投稿2018/02/24 15:19

編集2018/02/25 12:01
tatsuya6502

総合スコア2046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsuya6502

2018/02/25 04:35

質問の追記部分(erlport のコンパイルエラー)について、回答に追記しました。
Hayato1201

2018/02/25 05:09

さらに追記さていただきました。何度もすみません。
tatsuya6502

2018/02/25 05:19 編集

いえいえ、大丈夫ですよ。:python.stop/0 のエラーは私も遭遇しました。元記事の間違いのようです。さっき私が追記した回答の最後のところに、編集リクエストへのリンクがありますので、リンク先を参考に Elixir コードを修正してください。
Hayato1201

2018/02/25 06:01

ありがとうございます。 その通りに直したとおもうのですがやはりエラーが出てしまいます。。。一応実行はされて30という値にはなってはいますが、その後に上記に書いたようなエラーが出ます。これは問題ないのでしょうか? また、一応実行はできているので、次のコードも試してみようと思ったのですが、iex> recompileがうまくいきません。これは、iex -S mixと入力してからするのでしょうか?そうした場合noopと出てしまいます。また、最初からiex> recompileと打つと何も動きません。Elixirの知識が無いものでこの辺もよく分かりません。。。
tatsuya6502

2018/02/25 06:27

説明不足でした。:python.stop( py_exec ) と修正した後に recompile が必要でしたね。 Elixir のコードは iex の起動時(iex -S mix を実行した時)にコンパイルされます。iex の立ち上げ後に Elixir のソースファイルの内容を修正した場合は、修正を反映するために recompile を実行するか、iex をいったん終了する必要があります(Ctrl + C を二回押す) それから、recompile で :noop が返ってくる時は「変更されたソースファイルがないのでコンパイルを行わなかった」という意味になります。(もしコンパイルするソースファイルがあったときは、:ok が返ってきます) あ、もしかして、元の場所(Google ドライブ)にあるソースファイルを修正しているのかな。日本語ディレクトリ名の問題で pyex を別の場所にコピーしたと思いますので、そちらのソースファイルを修正しているか、もう一度、確認してください。
Hayato1201

2018/02/25 08:01

ありがとうございました!お陰様でエラーも取れたのでいよいよkerasを呼び出すところまで行きました。しかしまたしても実行するところでエラーが起きてしまいました。。。少し長くなるので質問に追記させてください。。。
tatsuya6502

2018/02/25 08:01

> iex> recompileがうまくいきません。これは、iex -S mixと入力してからするのでしょうか? はい。そうです。 1. ターミナルで iex -S mix を入力し iex シェルを起動する → プロンプト「iex(1)>」が表示される(※)。 2. 別のウィンドウ(エディタアプリなどで)ソースファイルを修正して保存する。 3. 変更を反映する(再コンパイル)するために、iex シェルのプロンプトに対して recompile と入力しリターンキーを押す → :ok と表示される。 ※プロンプトはコマンドを入力するたびに iex(1)> → iex(2)> → iex(3)> のように数字が増えていきます。この数字の部分は本質的ではないので、元の記事では一律に「iex> 」と表示しています。「iex> 〇〇」と書かれている時は、iex のプロンプトに対して〇〇というコマンドを入力すると解釈してください。
tatsuya6502

2018/02/25 08:04

あ、行き違いでコメントを投稿してしまいました。kerasを呼び出すところまで行ったんですね。よかったです! 私はこれから外出してしまうのと、kerasはまだインストールしてないことがあり、次の質問にはすぐに回答できないかもしれません。一応、元記事を書かれた方には、元記事のコメントで質問が上がっている旨、連絡を入れてあります(まだ返事はありませんが)
Hayato1201

2018/02/25 08:06

承知しました!ここまでわざわざありがとうございました!助かります!
tatsuya6502

2018/02/25 12:00

私自身は keras はまだインストールしてないので試せてはいないのですが、とりあえず私の分かる範囲での対応方法を回答に追記しました(追記2のところ)。(元記事は12月に公開された時に読んで、いつか時間のある時に試そうと思っているうちに試すのを忘れてしまってました...)
Hayato1201

2018/02/25 14:57 編集

そうだったんっですね!ぜひこの機会に試して見てください笑 keras単品で動かす前に実行するコマンドというのは特になく、py_predict_sinがあるlibのディレクトリに移動してPython3 py_predict_sinで実行しています。pathを調べて以下のように def predict() do { :ok, py_exec } = :python.start( [ python: '/usr/bin/python', python_path: 'lib' ] ) :python.call( py_exec, :py_predict_sin, :predict, [] ) :python.stop( py_exec ) end としたのですがやはり同じエラーが出ます。。。
Hayato1201

2018/02/25 14:57

もし解決策がお分かりのようでしたらお時間のある際にまたぜひお願いいたします!
tatsuya6502

2018/02/25 22:21 編集

python3 py_predict_sin で実行してるんですね。Elixir からですと python py_predict_sin が実行されてしまうので、きっとそのせいでうまく動かないのだと思います。 which python3 で path を調べて、:python.start( [ python: ..., ... ] ) に設定してみてください。
Hayato1201

2018/02/26 01:07

ありがとうございます!お陰様でついに実行することができました! ただ最後にsin関数のグラフが出て来るところまではいいのですが、それをバツを押して消そうとすると、以下のようなエラーが出てきてフリーズするのでCtrl+Cで終了しなければならなくなります。このエラーは何なのでしょうか?? ** (ErlangError) Erlang error: {:python, :"builtins.AttributeError", 'module \'py_predict_sin\' has no attribute \'predict\'', {:"$erlport.opaque", :python, <<128, 2, 99, 116, 114, 97, 99, 101, 98, 97, 99, 107, 10, 83, 116, 97, 99, 107, 83, 117, 109, 109, 97, 114, 121, 10, 113, 0, 41, 129, 113, 1, 40, 99, 116, 114, 97, 99, 101, 98, 97, 99, 107, ...>>}} (erlport) /Users/tmsmac/pyex/deps/erlport/src/erlport.erl:234: :erlport.call/3 (pyex) lib/pyex.ex:27: Pyex.predict/0
tatsuya6502

2018/02/26 11:38

実行できてよかったです。あとひと息ですね! module 'py_predict_sin' has no attribute 'predict'' ですが、Elixir から py_predict_sin.py の predict() 関数を呼び出そうとしたが、そんな関数はなかった、というエラーです。元記事のプログラムの問題のようだったので、修正して、編集リクエストを送りました。修正後の py_predict_sin.py はこちらのページで見られます。 https://qiita.com/piacere/items/c1af7b6ce472db83cff6/patches/44389?type=preview 念のため macOS High Sierra に Keras と Elixir をインストールして、上のページの内容で ⑤ElixirからKerasを呼び出すまで実行できることを確認済みです。
Hayato1201

2018/02/27 02:57

ここまで本当にありがとうございました。ついに全てのエラーが消えました。 今回非常に助かりました。フォローもさせていただきしたが、今後とももし何かあればよろしくお願いいたします!
Hayato1201

2018/02/27 03:57

すみません、早速また問題が出てしまいました・・・もしよろしければリクエストさせていただいたのでお時間があればよろしくお願いします・・
Hayato1201

2018/02/27 05:03

あ、大丈夫なようでした、ご迷惑おかけしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問