Я пытаюсь перевести код в https://github.com/YerevaNN/Spoken-language-identification/blob/master/theano/networks/tc_net_rnn_onernn.py, который написан лазанью, в мою модель в керасе.
Моя модель в керасе на данный момент
input1 = Input(shape=input_shape_stft)
conv1=Conv2D(16, kernel_size=(7,7), strides=1, activation='relu')(input1)
pool1=MaxPooling2D(pool_size=(3,3), strides=2)(conv1)
conv2=Conv2D(32, kernel_size=(5,5), strides=1, activation='relu')(pool1)
pool2=MaxPooling2D(pool_size=(3,3), strides=2)(conv2)
conv3=Conv2D(32, kernel_size=(3,3), strides=1, activation='relu')(pool2)
pool3=MaxPooling2D(pool_size=(3,3), strides=2)(conv3)
conv4=Conv2D(32, kernel_size=(3,3), strides=1, activation='relu')(pool3)
pool4=MaxPooling2D(pool_size=(3,3), strides=2)(conv4)
permute=Permute((3,1,2))(pool4)
и я пытаюсь добавить этот код
network = layers.MaxPool2DLayer(incoming=network, pool_size=(3, 3), stride=2, pad=2)
output = layers.get_output(network)
output = output.transpose((0, 3, 1, 2))
########up to here it is my code###########
output = output.flatten(ndim=3)
# NOTE: these constants are shapes of last pool layer, it can be symbolic
# explicit values are better for optimizations
num_channels = 32
filter_W = 54
filter_H = 8
# InputLayer
network = layers.InputLayer(shape=(None, filter_W, num_channels * filter_H), input_var=output)
# GRULayer
network = layers.GRULayer(incoming=network, num_units=self.num_units, only_return_final=True)
# Last layer: classification
network = layers.DenseLayer(incoming=network, num_units=176, nonlinearity=softmax)
но меня очень смущают различия (от theano до тензорного потока) и слои Transpose
и Flatten
от Лазаньи до Кераса.
Кто написал код, предоставьте также этот образ архитектуры https://github.com/YerevaNN/yerevann.github.io/blob/master/public/2016-06-26/cnn-one-rnn.png
Спасибо.