Entfernen dimension durch Umformen in keras?
Ist es möglich, entfernen Sie eine dimension mithilfe Umformen oder für jede andere Funktion.
Habe ich das folgende Netzwerk.
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)
Den maxpooling Schicht schafft einen Ausgang mit dimension (15,1,36), den würde ich gerne entfernen der mittleren Achse, so dass die output-dimension am Ende wird (15,36)..
Wenn möglich würde ich gerne vermeiden, Angabe der Außenmaße, oder wie ich versucht habe, die Verwendung der vorherigen Ebene dimension in Form.
#reshape = Reshape((merge.shape[0],merge.shape[3]))(merge) # expected output dim: (15,145)
Muss ich meinen output-dimension für das gesamte Netzwerk (15,145), in dem die mittleren dimension verursacht einige Probleme.
Wie Entferne ich die mittlere dimension?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollte ich entfernen, alle Maße sind gleich 1, aber nicht geben Sie eine bestimmte Größe mit
Reshape
so, dass mein code nicht zu brechen, wenn ich die input-Größe oder die Anzahl der Kerne in einer Gehirnwindung. Das funktioniert mit dem funktionalen keras-API auf eine tensorflow backend.