Reshapeまたはその他の機能を使用して寸法を削除することは可能ですか?kerasのreshapeを使用してディメンションを削除しますか?
私は以下のネットワークを持っています。
import keras
from keras.layers.merge import Concatenate
from keras.models import Model
from keras.layers import Input, Dense
from keras.layers import Dropout
from keras.layers.core import Dense, Activation, Lambda, Reshape,Flatten
from keras.layers import Conv2D, MaxPooling2D, Reshape, ZeroPadding2D
import numpy as np
#Number_of_splits = ((input_width-win_dim)+1)/stride_dim
splits = ((40-5)+1)/1
print splits
train_data_1 = np.random.randint(100,size=(100,splits,45,5,3))
test_data_1 = np.random.randint(100,size=(10,splits,45,5,3))
labels_train_data =np.random.randint(145,size=(100,15))
labels_test_data =np.random.randint(145,size=(10,15))
list_of_input = [Input(shape = (45,5,3)) for i in range(splits)]
list_of_conv_output = []
list_of_max_out = []
for i in range(splits):
list_of_conv_output.append(Conv2D(filters = 145 , kernel_size = (15,3))(list_of_input[i])) #output dim: 36x(31,3,145)
list_of_max_out.append((MaxPooling2D(pool_size=(2,2))(list_of_conv_output[i]))) #output dim: 36x(15,1,145)
merge = keras.layers.concatenate(list_of_max_out) #Output dim: (15,1,5220)
#reshape = Reshape((merge.shape[0],merge.shape[3]))(merge) # expected output dim: (15,145)
dense1 = Dense(units = 1000, activation = 'relu', name = "dense_1")(merge)
dense2 = Dense(units = 1000, activation = 'relu', name = "dense_2")(dense1)
dense3 = Dense(units = 145 , activation = 'softmax', name = "dense_3")(dense2)
model = Model(inputs = list_of_input , outputs = dense3)
model.compile(loss="sparse_categorical_crossentropy", optimizer="adam")
print model.summary()
raw_input("SDasd")
hist_current = model.fit(x = [train_input[i] for i in range(100)],
y = labels_train_data,
shuffle=False,
validation_data=([test_input[i] for i in range(10)], labels_test_data),
validation_split=0.1,
epochs=150000,
batch_size = 15,
verbose=1)
maxpooling層iは中央軸を除去したいので、出力の次元は(15,36)である終わる寸法(15,1,36)と出力を作成..
可能であれば、私は外側の寸法を指定しないようにしたいと思います。あるいは、以前の層の寸法を使ってそれを変形しようとしました。
#reshape = Reshape((merge.shape[0],merge.shape[3]))(merge) # expected output dim: (15,145)
中間ディメンションで問題が発生しているネットワーク全体(15,145)の出力ディメンションが必要です。
中間ディメンションを削除するにはどうすればよいですか?
質問は数か月前に回答されましたが、あなたの答えにはどんな新しい価値がありますか? –
@Maciej Jureczko私が答えたところでは、モデルのパラメータを変更したときに変化する可能性のある、前のレイヤーからの出力テンソルのサイズを調べるのではなく、未知の寸法サイズの1サイズのサイズを削除することができます入力サイズ。前の答えは、あなたのモデルへの今後の調整がより難しいことを意味します。 – jeremysprofile