前提・実現したいこと
kerasのfit関数の引数batch_sizeについてです。
半年ほどニューラルネットワークを勉強しているんですが、つまずきました。
batch_sizeについてですが、以下の事が解だと思っています。
1, バッチ分データを分割して学習(batch_size=2, data_set=400の場合、400/2回学習)、割り切れなかったりした場合は切り捨て?して計算してくれる(はず)
2, batch_size=1であれば確率的になる。
3, 指定しない場合はDefault=32となる(Noneでも)。
4, batch_sizeは2^nで決めると良い。(ケースバイケース)
これらのことから、あまり深く決める必要はないと感じました。
が、しかし、
発生している問題・エラーメッセージ
batch_size=8の場合です。
なぜでしょうか。
これはどの部分を指しているのでしょうか。
Incompatible shapes: [8] vs. [8,64,64]
また、batch_size=64にした場合、こうなります。
よく分かりません。
Incompatible shapes: [24] vs. [24,64,64]
合わすことができれば、こういう風に計算できると思うんですが…
x = np.ones(64) y = np.ones((64, 64, 64)) dot = np.dot(x, y)
該当のソースコード
長いので、関連がありそうな部分だけを載せます。
trainは664、validateは166
Convが1層しかない簡単なネットワークです。
h = 64
w = 64
d = 3
入出力は、
Input
in :(None, 64, 64, 3)
out:(None, 64, 64, 3)
Conv2D
in :(None, 64, 64, 3)
out:(None, 64, 64, 64)
Dense
in :(None, 64, 64, 64)
out:(None, 64, 64, 64)
Dense
in :(None, 64, 64, 64)
out:(None, 64, 64, 3)
Python3
1class teratail(object): 2 def __init__(self, h, w, d, label): 3 self.inputs = Input(shape=(h, w, d), name="inputs") 4 self.x = Conv2D(64, 3, padding="same", activation="relu")(self.inputs) 5 self.x = Dense(64, activation="relu")(self.x) 6 self.outputs = Dense(label, activation="softmax")(self.x) 7 8 def create_model(self): 9 self.model = Model(self.inputs, self.outputs, name="network") 10 11 def model_compile(self): 12 loss_object = tf.losses.CategoricalCrossentropy() 13 optimizer = tf.optimizers.Adam(lr=1e-4) 14 15 self.model.compile(loss=loss_object, 16 optimizer=optimizer, 17 metrics=["accuracy"]) 18 19 def model_fit(self, x_train, y_train, epochs=10): 20 21 _return = self.model.fit(x_train, y_train, 22 batch_size=8, 23 epochs=epochs, 24 validation_split=0.2, 25 ) 26 self.model.summary() 27
お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/28 01:00
2019/05/28 01:27 編集
2019/05/28 01:40
2019/05/28 02:16
2019/05/28 03:14
2019/05/28 03:37 編集
2019/05/28 10:05