🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

Q&A

2回答

1191閲覧

pythonの構文をjuliaで書き換えたい。

kouzi

総合スコア0

Keras

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

0グッド

0クリップ

投稿2021/01/15 05:54

前提・実現したいこと

pythonでの構文をjuliaで書き換えたい。

発生している問題・エラーメッセージ

自分なりにjuliaの言語で書き換えても実行できない。

該当のソースコード

独立版Keras用コード

from future import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

input image dimensions

img_rows, img_cols = 28, 28

the data, split between train and test sets

(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

convert class vectors to binary class matrices

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])

model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[0+1]) #Blogの都合で意図的に[0+1]と表記

試したこと

using PyCall
const keras
const mnist=keras[:datasets]
const Sequential=keras[:models]
const Dense,Dropout,Flatten=keras[:layers]
const Conv2D,MaxPooling2D=keras[:layers]
const backend as K=keras
上の部分だけをこのように変更してみました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2021/01/15 05:56

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください で、提示のコードではどういう不具合があるんでしょうか。 また、それをどういうふうにしたいのか、という説明も提示しましょう
guest

回答2

0

最近はPyCallよりもPythonCallの方が推奨されているので,そちらの方での実装例です。

PythonCallの場合は,Pythonのオブジェクトを自動変換しないので,意図的に変換しないといけない部分があります。
例えば if string(K.image_data_format()) == "channels_first" のところの
K.image_data_format()はPythonの文字列型なので,うっかり
if K.image_data_format() == "channels_first"で,'channels_first'が返ってきても,違うので必ずfalse
となります。

また,Juliaでは[データ, ...]の表現は配列型, Pythonではリスト型なので,リスト型の場合明確にpylist(...)としないといけないようです。

julia

1using PythonCall 2 3tf = pyimport("tensorflow") 4np = pyimport("numpy") 5keras = tf.keras 6mnist = keras.datasets.mnist 7Sequential = keras.models.Sequential 8Dense, Dropout = keras.layers.Dense, keras.layers.Dropout 9Flatten, Conv2D = keras.layers.Flatten, keras.layers.Conv2D 10MaxPooling2D = keras.layers.MaxPooling2D 11K = keras.backend 12 13batch_size = 128 14num_classes = 10 15epochs = 12 16 17# input image dimensions 18img_rows, img_cols = 28, 28 19 20# the data, split between train and test sets 21(x_train, y_train), (x_test, y_test) = mnist.load_data() 22 23if string(K.image_data_format()) == "channels_first" 24 x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) 25 x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) 26 input_shape = (1, img_rows, img_cols); 27else 28 x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) 29 x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) 30 input_shape = (img_rows, img_cols, 1); 31end 32 33x_train /= 255.0 34x_test /= 255.0 35println("x_train shape: $(np.shape(x_train))") 36println("$(pylen(x_train)) train samples") 37println("$(pylen(x_test)) test samples") 38 39# convert class vectors to binary class matrices 40y_train = keras.utils.to_categorical(y_train, num_classes) 41y_test = keras.utils.to_categorical(y_test, num_classes) 42 43model = Sequential(); 44model.add(Conv2D(32, kernel_size=(3, 3), 45 activation="relu", 46 input_shape=input_shape)) 47model.add(Conv2D(64, (3, 3), activation="relu")) 48model.add(MaxPooling2D(pool_size=(2, 2))) 49model.add(Dropout(0.25)) 50model.add(Flatten()) 51model.add(Dense(128, activation="relu")) 52model.add(Dropout(0.5)) 53model.add(Dense(num_classes, activation="softmax")) 54model.compile(loss=keras.losses.categorical_crossentropy, 55 optimizer=keras.optimizers.Adadelta(), 56 metrics=pylist(["accuracy"])) 57 58model.fit(x=x_train, y=y_train, 59 batch_size=batch_size, 60 epochs=epochs, 61 validation_data=(x_test, y_test)) 62score = model.evaluate(x_test, y_test) 63println("Test loss: $(score[0])") 64println("Test accuracy: $(score[1])")

投稿2024/03/31 17:31

ujimushi_sradjp

総合スコア2152

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

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

0

最新のPyCallだとよりpythonとの区別がつかない書き方ができるようですね。
次のような感じでどうでしょうか?

julia

1using PyCall 2 3const tensorflow = pyimport("tensorflow") 4const keras = tensorflow.keras 5const mnist = keras.datasets.mnist 6const Sequential = keras.models.Sequential 7const Dense, Dropout = keras.layers.Dense, keras.layers.Dropout 8const Flatten, Conv2D = keras.layers.Flatten, keras.layers.Conv2D 9const MaxPooling2D = keras.layers.MaxPooling2D 10const K = keras.backend 11 12batch_size = 128 13num_classes = 10 14epochs = 12 15 16# input image dimensions 17img_rows, img_cols = 28, 28 18 19# the data, split between train and test sets 20(x_train, y_train), (x_test, y_test) = mnist.load_data() 21 22if K.image_data_format() == "channels_first" 23 x_train = reshape(x_train, (size(x_train)[1], 1, img_rows, img_cols)); 24 x_test = reshape(x_test, (size(x_test)[1], 1, img_rows, img_cols)); 25 input_shape = (1, img_rows, img_cols); 26else 27 x_train = reshape(x_train, (size(x_train)[1], img_rows, img_cols, 1)); 28 x_test = reshape(x_test, (size(x_test)[1], img_rows, img_cols, 1)); 29 input_shape = (img_rows, img_cols, 1); 30end 31 32x_train = Float32.(x_train ./ 255.0) 33x_test = Float32.(x_test ./ 255.0) 34println("x_train shape: $(size(x_train))") 35println("$(size(x_train)[1]) train samples") 36println("$(size(x_test)[1]) test samples") 37 38# convert class vectors to binary class matrices 39y_train = keras.utils.to_categorical(y_train, num_classes) 40y_test = keras.utils.to_categorical(y_test, num_classes) 41 42model = Sequential(); 43model.add(Conv2D(32, kernel_size=(3, 3), 44 activation="relu", 45 input_shape=input_shape)) 46model.add(Conv2D(64, (3, 3), activation="relu")) 47model.add(MaxPooling2D(pool_size=(2, 2))) 48model.add(Dropout(0.25)) 49model.add(Flatten()) 50model.add(Dense(128, activation="relu")) 51model.add(Dropout(0.5)) 52model.add(Dense(num_classes, activation="softmax")) 53model.compile(loss=keras.losses.categorical_crossentropy, 54 optimizer=keras.optimizers.Adadelta(), 55 metrics=["accuracy"]) 56 57model.fit(x=x_train, y=y_train, 58 batch_size=batch_size, 59 epochs=epochs, 60 verbose=1, 61 validation_data=(x_test, y_test)) 62score = model.evaluate(x_test, y_test, verbose=0) 63println("Test loss: $(score[1])") 64println("Test accuracy: $(score[1+1])") 65

動作環境としては次の通りです。

  • ubuntu 22.04 on x86_64
  • Julia 1.8.0
  • Conda(Juliaのパッケージ) 1.7.0
  • PyCall 1.94.1

既存の状態だとconst tensorflow = pyimport("tensorflow")でエラーが出たため

julia

1using Pkg 2Pkg.remove("Conda") 3Pkg.remove("PyCall")

の後,

bash

1rm -rf $HOME/.julia/conda

でJulia環境内のCondaを全消し。その後

julia

1using Pkg 2Pkg.add("Conda") 3Pkg.add("PyCall") 4using Conda 5Conda.update() 6Conda.add("tensorflow") 7Pkg.build("PyCall")

のような感じで環境を整えました。

投稿2022/09/27 11:30

ujimushi_sradjp

総合スコア2152

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問