2017-05-19 8 views
10

मुझे पता है कि कैमरे में Conv2DTranspose है जिसका उपयोग छवि में किया जा सकता है। हमें इसे एनएलपी में उपयोग करने की ज़रूरत है, इसलिए 1 डी deconvolution की जरूरत है।कैरिज में Conv1DTranspose को कार्यान्वित करने के लिए कैसे?

हम कैसे करियर में Conv1DTranspose को कार्यान्वित करते हैं?

उत्तर

0

आप इसे एक अतिरिक्त आयाम पर कब्जा करने, deconvolution चलाने, और फिर इसे फिर से आकार बदलने के लिए reshape कर सकते हैं। अभ्यास में, यह काम करता है। लेकिन मैं वास्तव में बहुत मुश्किल नहीं सोचा गया है अगर यह किसी भी सैद्धांतिक निहितार्थ हैं (लेकिन यह के रूप में आप नहीं करने के लिए "convolve" उस आयाम से अधिक

x = Reshape((-1, 1))(x) 
x = Permute((3, 1, 2))(x) 
x = Conv2DTranspose(filters, kernel)(x) 
x = Lambda(K.squeeze, arguments={"axis":1})(x) 
1

उपयोग keras बैकएंड इनपुट फिट करने के लिए जा रहे हैं सैद्धांतिक रूप से भी ठीक हो रहा है टेन्सर घुमाव के लिए स्थानांतरित 2D पर। हमेशा आपरेशन स्थानांतरित उपयोग न करें यह बहुत समय खपत होगी के लिए।

import keras.backend as K 
from keras.layers import Conv2DTranspose 


def Conv1DTranspose(input_tensor, filters, kernel_size, strides=2, padding='same'): 
    x = Lambda(lambda x: K.expand_dims(x, axis=2))(input_tensor) 
    x = Conv2DTranspose(filters=filters, kernel_size=(kernel_size, 1), strides=(strides, 1), padding=padding)(x) 
    x = Lambda(lambda x: K.squeeze(x, axis=2))(x) 
    return x 
+1

** समीक्षा से **: जबकि उत्तरों की हमेशा सराहना की जाती है, यह वास्तव में आपकी जानकारी को हल करने के तरीके के बारे में कुछ जानकारी प्रदान करने में मदद करता है। हर कोई आपके सटीक कोडिंग तर्क से परिचित नहीं हो सकता है, लेकिन आपके सामान्य * दृष्टिकोण * या * अवधारणा * को समझ सकता है। अपने उत्तर को बेहतर बनाने में मदद के लिए, कृपया कुछ [** इसके आसपास के संदर्भ **] (https://meta.stackexchange.com/questions/114762) प्रदान करें, और [** महान उत्तरों लिखना **] पर सहायता लेख देखें (http://stackoverflow.com/help/how-to-answer) अपने उत्तरों को गिनने के तरीके के बारे में कुछ सुझावों के लिए :) –

1

मेरा उत्तर में, मैं आपको पहले से घुमाव के लिए Conv1D उपयोग कर रहे हैं लगता है।

Conv2DTranspose नया है केरास 2 में, यह वह था जो यह था UpSampling2D और एक रूपांतरण परत के संयोजन द्वारा किया गया था। स्टैक एक्सचेंज [डेटा साइंस] में what are deconvolutional layers के बारे में एक बहुत ही रोचक चर्चा है (एक उत्तर में बहुत उपयोगी एनिमेटेड gifs शामिल हैं)।

"Why all convolutions (no deconvolutions) in "Building Autoencoders in Keras" दिलचस्प के बारे में इस चर्चा की जांच करें। यहां एक अंश दिया गया है: "फ्रैंकोइस ने पहले से ही कई बार समझाया है, एक deconvolution परत केवल एक उलझन के साथ एक संकल्प परत है। मुझे नहीं लगता कि एक आधिकारिक deconvolution परत है। परिणाम एक ही है।" (चर्चा पर चला जाता है, यह हो सकता है कि वे लगभग, ठीक उसी नहीं हैं -, यह भी तब से, Keras 2 पेश किया Conv2DTranspose)

तरह से मैं इसे समझ, UpSampling1D का एक संयोजन और फिर Convolution1D है कि तुम क्या कर रहे हैं तलाश में, मुझे 2 डी जाने का कोई कारण नहीं दिख रहा है।

यदि आप Conv2DTranspose के साथ जाना चाहते हैं, तो आपको पहले इनपुट को 1 डी से 2 डी तक दोबारा बदलना होगा।

model = Sequential() 
model.add(
    Conv1D(
     filters = 3, 
     kernel_size = kernel_size, 
     input_shape=(seq_length, M),#When using this layer as the first layer in a model, provide an input_shape argument 
    ) 
) 
model.add(
    Reshape((-1, 1, M)) 
) 
model.add(
    keras.layers.Conv2DTranspose(
     filters=M, 
     kernel_size=(10,1), 
     data_format="channels_last" 
    ) 
) 

Conv2DTranspose उपयोग करने के लिए असुविधाजनक बात यह है कि आप (seq_length निर्दिष्ट करने की आवश्यकता है और यह कोई नहीं (मनमाने ढंग से लंबाई श्रृंखला) के रूप में दुर्भाग्य से नहीं हो सकता , एक ही TensorFlow बैक-एंड के लिए UpSampling1D साथ सच है थेनो हो रहा है है एक बार फिर से बेहतर - यह बहुत बुरा नहीं है)

संबंधित मुद्दे