前提・実現したいこと
tensorflowのソース知識をもとに、kerasのコードに書き換えたときに思った不思議な点について教えていただければと思います。
テンソルの計算では、重みの最適化によって解が求まると理解しております。
tensorflowのサンプルなどでは、重みの初期化が行われ、一般的に標準偏差によって初期化されるものと理解しております。
そこで、kerasでもサンプルで同じようなことをしているのかなと思ったのですが、重みの初期化なしにコードが書かれています。
この場合、重みはどのように扱っていると考えいいものなのでしょうか。
初期値が0だと、どれだけ更新しても重みが0のままで学習が進まないと思うのですが、考え方自体間違っているのでしょうか。
どなたか教えていただけますでしょうか。
よろしくおねがいいたします。
とりあえず、Sequentialモデルのサンプルを貼り付けておきます。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
python keras ソースコード (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train1, x_valid, y_train1, y_valid = train_test_split(x_train, y_train, test_size=0.175) x_train = x_train1 y_train = y_train1 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32')/255 x_valid = x_valid.reshape(x_valid.shape[0], 28, 28, 1).astype('float32')/255 x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32')/255 # convert one-hot vector y_train = keras.utils.to_categorical(y_train, 10) y_valid = keras.utils.to_categorical(y_valid, 10) y_test = keras.utils.to_categorical(y_test, 10) # create model model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))) 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(10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) print(model.summary())
試したこと
kerasの重みの扱いについての概念が知りたい。
また、追加でaddで
model.add(Conv2D(64, (3, 3), activation='relu'))
以上のように書いた場合、(64, (3, 3))は、3x3x64の3次元テンソルということを示しているのでしょうか。
基本的なことを質問してるかもしれませんが、まだ入門したててわかりません。
お願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/14 08:15
2018/11/14 09:02
2018/11/14 09:14
2018/11/14 09:22 編集
2018/11/14 09:25