2017-05-25 6 views
5

テンソルフローバックエンドを使用しています。ケラでどのように平坦なレイヤーが機能しますか?

コンボリューション、max-pooling、flatten、denseレイヤーを順次適用します。コンボリューションには3D入力(height、width、color_channels_depth)が必要です。

コンボリューション後、これは(height、width、Number_of_filters)になります。

max-pooling heightを適用すると、幅が変更されます。しかし、平坦化層を適用した後、正確に何が起こるか?例えば。

flattenの前の入力が(24,24,32)の場合、それをどのように平坦化するのですか?

高さは順次(24 * 24)、各フィルタ番号の重みは順番に、または他の方法でですか?実際の値で一例が分かるだろう。

答えて

12

Flatten()オペレータは最後の次元から始まる値をアンロール(TFなどのない「最後のチャンネル」、少なくとも「第一チャンネル」であるTheano、のために。私は私の環境でTensorFlowを実行することはできません)。 で、第一軸のインデックス に戻って、最速の変更最後の軸インデックス

「C」手段が読み出し/ Cのようなインデックスの順序を使用して要素を書くために:これは、「C」の順序でnumpy.reshapeに相当します最も遅く変化する。

ここでは、Keras Functional APIを使用してFlattenオペレータを示すスタンドアロンの例を示します。あなたは、あなたの環境に容易に適応できるはずです。

import numpy as np 
from keras.layers import Input, Flatten 
from keras.models import Model 
inputs = Input(shape=(3,2,4)) 

# Define a model consisting only of the Flatten operation 
prediction = Flatten()(inputs) 
model = Model(inputs=inputs, outputs=prediction) 

X = np.arange(0,24).reshape(1,3,2,4) 
print(X) 
#[[[[ 0 1 2 3] 
# [ 4 5 6 7]] 
# 
# [[ 8 9 10 11] 
# [12 13 14 15]] 
# 
# [[16 17 18 19] 
# [20 21 22 23]]]] 
model.predict(X) 
#array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 
#   11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 
#   22., 23.]], dtype=float32) 
+0

これは、Flattenの仕組みに関する非常に簡潔な回答です。 – nafizh

1

これは、24 * 24 * 32のように連続しており、次のコードのように再構成します。

def batch_flatten(x): 
    """Turn a nD tensor into a 2D tensor with same 0th dimension. 
    In other words, it flattens each data samples of a batch. 
    # Arguments 
     x: A tensor or variable. 
    # Returns 
     A tensor. 
    """ 
    x = tf.reshape(x, tf.stack([-1, prod(shape(x)[1:])])) 
    return x 
関連する問題