zoukankan      html  css  js  c++  java
  • conv1d UpSampling1D aotoencoder 自编码代码摘录

    https://www.quora.com/How-do-I-implement-a-1D-Convolutional-autoencoder-in-Keras-for-numerical-dataset

        # ENCODER
        input_sig = Input(batch_shape=(None,128,1))
        x = Conv1D(64,3, activation='relu', padding='valid')(input_sig)
        x1 = MaxPooling1D(2)(x)
        x2 = Conv1D(32,3, activation='relu', padding='valid')(x1)
        x3 = MaxPooling1D(2)(x2)
        flat = Flatten()(x3)
        encoded = Dense(32,activation = 'relu')(flat)
         
        print("shape of encoded {}".format(K.int_shape(encoded)))
         
        # DECODER 
        x2_ = Conv1D(32, 3, activation='relu', padding='valid')(x3)
        x1_ = UpSampling1D(2)(x2_)
        x_ = Conv1D(64, 3, activation='relu', padding='valid')(x1_)
        upsamp = UpSampling1D(2)(x_)
        flat = Flatten()(upsamp)
        decoded = Dense(128,activation = 'relu')(flat)
        decoded = Reshape((128,1))(decoded)
         
        print("shape of decoded {}".format(K.int_shape(decoded)))
         
        autoencoder = Model(input_sig, decoded)
        autoencoder.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
    

    http://qaru.site/questions/418926/keras-autoencoder-error-when-checking-target

    from keras.layers import Input, Dense, Conv1D, MaxPooling1D, UpSampling1D
    from keras.models import Model
    from keras import backend as K
    import scipy as scipy
    import numpy as np 
    
    mat = scipy.io.loadmat('edata.mat')
    emat = mat['edata']
    
    input_img = Input(shape=(64,1))  # adapt this if using `channels_first` image data format
    
    x = Conv1D(32, (9), activation='relu', padding='same')(input_img)
    x = MaxPooling1D((4), padding='same')(x)
    x = Conv1D(16, (9), activation='relu', padding='same')(x)
    x = MaxPooling1D((4), padding='same')(x)
    x = Conv1D(8, (9), activation='relu', padding='same')(x)
    encoded = MaxPooling1D(4, padding='same')(x)
    
    x = Conv1D(8, (9), activation='relu', padding='same')(encoded)
    x = UpSampling1D((4))(x)
    x = Conv1D(16, (9), activation='relu', padding='same')(x)
    x = UpSampling1D((4))(x)
    x = Conv1D(32, (9), activation='relu')(x)
    x = UpSampling1D((4))(x)
    decoded = Conv1D(1, (9), activation='sigmoid', padding='same')(x)
    
    autoencoder = Model(input_img, decoded)
    autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
    
    x_train = emat[:,0:80000]
    x_train = np.reshape(x_train, (x_train.shape[1], 64, 1))
    x_test = emat[:,80000:120000]
    x_test = np.reshape(x_test, (x_test.shape[1], 64, 1))
    
    from keras.callbacks import TensorBoard
    
    autoencoder.fit(x_train, x_train,
                    epochs=50,
                    batch_size=128,
                    shuffle=True,
                    validation_data=(x_test, x_test),
                    callbacks=[TensorBoard(log_dir='/tmp/autoencoder')])
    

    貌似上面的有问题,修改后是:

    input_img = Input(shape=(64,1))  
    
    x = Conv1D(32, (9), activation='relu', padding='same')(input_img)
    x = MaxPooling1D((4), padding='same')(x)
    x = Conv1D(16, (9), activation='relu', padding='same')(x)
    x = MaxPooling1D((4), padding='same')(x)
    x = Conv1D(8, (9), activation='relu', padding='same')(x)
    encoded = MaxPooling1D(4, padding='same')(x)
    
    x = Conv1D(8, (9), activation='relu', padding='same')(encoded)
    x = UpSampling1D((4))(x)
    x = Conv1D(16, (9), activation='relu', padding='same')(x)
    x = UpSampling1D((4))(x) 
    x = Conv1D(32, (9), activation='relu')(x)
    x = UpSampling1D((8))(x)              ##   <-- change here (was 4)
    decoded = Conv1D(1, (9), activation='sigmoid', padding='same')(x)  
    
    autoencoder = Model(input_img, decoded)
    autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
    

    一些生成模型:https://www.programcreek.com/python/example/93306/keras.layers.convolutional.UpSampling1D

    def generator_model():  # CDNN Model
        print(INPUT_LN, N_GEN_l, CODE_LN) 
    
        model = Sequential()
    
        model.add(Convolution1D(16, 5, border_mode='same', input_shape=(CODE_LN, 1)))
        model.add(Activation('relu'))
    
        model.add(UpSampling1D(length=N_GEN_l[0]))
        model.add(Convolution1D(32, 5, border_mode='same'))
        model.add(Activation('relu'))
    
        model.add(UpSampling1D(length=N_GEN_l[1]))
        model.add(Convolution1D(1, 5, border_mode='same'))
        model.add(Activation('tanh'))
        return model 
    
    def generator_model(noise_dim=100, aux_dim=47, model_name="generator"):
        # Merge noise and auxilary inputs
        gen_input = Input(shape=(noise_dim,), name="noise_input")
        aux_input = Input(shape=(aux_dim,), name="auxilary_input")
        x = concatenate([gen_input, aux_input], axis=-1)
    
        # Dense Layer 1
        x = Dense(10 * 100)(x) 
        x = BatchNormalization()(x)
        x = LeakyReLU(0.2)(x) # output shape is 10*100
    
        # Reshape the tensors to support CNNs
        x = Reshape((100, 10))(x) # shape is 100 x 10
    
        # Conv Layer 1
        x = Conv1D(filters=250, kernel_size=13, padding='same')(x)
        x = BatchNormalization()(x)
        x = LeakyReLU(0.2)(x) # output shape is 100 x 250
        x = UpSampling1D(size=2)(x) # output shape is 200 x 250
    
        # Conv Layer 2
        x = Conv1D(filters=100, kernel_size=13, padding='same')(x)
        x = BatchNormalization()(x)
        x = LeakyReLU(0.2)(x) # output shape is 200 x 100
        x = UpSampling1D(size=2)(x) # output shape is 400 x 100
        
        # Conv Layer 3
        x = Conv1D(filters=1, kernel_size=13, padding='same')(x)
        x = BatchNormalization()(x)
        x = Activation('tanh')(x) # final output shape is 400 x 1
    
        generator_model = Model(
            outputs=[x], inputs=[gen_input, aux_input], name=model_name)
    
        return generator_model 
    
    def generator_model_44():  # CDNN Model
        model = Sequential()
    
        model.add(Convolution1D(16, 5, border_mode='same', input_shape=(CODE_LN, 1)))
        model.add(Activation('relu'))
    
        model.add(UpSampling1D(length=4))
        model.add(Convolution1D(32, 5, border_mode='same'))
        model.add(Activation('relu'))
    
        model.add(UpSampling1D(length=4))
        model.add(Convolution1D(1, 5, border_mode='same'))
        # model.add(Activation('relu'))
        return model 
    
    def generator_model(noise_dim=100, aux_dim=47, model_name="generator"):
        # Merge noise and auxilary inputs
        gen_input = Input(shape=(noise_dim,), name="noise_input")
        aux_input = Input(shape=(aux_dim,), name="auxilary_input")
        x = merge([gen_input, aux_input], mode="concat", concat_axis=-1)
    
        # Dense Layer 1
        x = Dense(10 * 100)(x) 
        x = BatchNormalization()(x)
        x = LeakyReLU(0.2)(x) # output shape is 10*100
    
        # Reshape the tensors to support CNNs
        x = Reshape((100, 10))(x) # shape is 100 x 10
    
        # Conv Layer 1
        x = Convolution1D(nb_filter=250,
                          filter_length=13,
                          border_mode='same',
                          subsample_length=1)(x)
        x = BatchNormalization()(x)
        x = LeakyReLU(0.2)(x) # output shape is 100 x 250
        x = UpSampling1D(length=2)(x) # output shape is 200 x 250
    
        # Conv Layer 2
        x = Convolution1D(nb_filter=100,
                          filter_length=13,
                          border_mode='same',
                          subsample_length=1)(x)
        x = BatchNormalization()(x)
        x = LeakyReLU(0.2)(x) # output shape is 200 x 100
        x = UpSampling1D(length=2)(x) # output shape is 400 x 100
        
        
        # Conv Layer 3
        x = Convolution1D(nb_filter=1,
                          filter_length=13,
                          border_mode='same',
                          subsample_length=1)(x)
        x = BatchNormalization()(x)
        x = Activation('tanh')(x) # final output shape is 400 x 1
    
        generator_model = Model(
            input=[gen_input, aux_input], output=[x], name=model_name)
    
        return generator_model 
    

    下面代码有问题,但是结构可以参考(https://groups.google.com/forum/#!topic/keras-users/EXOuZ4YKONY):

    import numpy as np
    
    from keras.layers import Input # define the input shape for the model
    from keras.layers import Conv1D, MaxPooling1D, UpSampling1D # for the convnet structure
    from keras.models import Model # for the overall definition
    
    
    from keras.initializers import Constant # bias initialisation
    from keras.initializers import TruncatedNormal # kernel initialissation
    from keras.layers.advanced_activations import LeakyReLU # activation function (from NSynth)
    
    
    # define input shape
    input_img = Input(shape=(500,128))
    print('Some information about tensor expected shapes')
    print('Input tensor shape:', input_img.shape)
    
    
    # define encoder convnet
    # obs: 1D convolution implemented
    x = Conv1D(filters=128,kernel_size=4,activation=LeakyReLU(),padding='causal',dilation_rate=4,bias_initializer=Constant(0.1),kernel_initializer=TruncatedNormal())(input_img)
    x = Conv1D(filters=256,kernel_size=(4),activation=LeakyReLU(),padding='causal',dilation_rate=2,bias_initializer=Constant(0.1),kernel_initializer=TruncatedNormal())(x)
    x = MaxPooling1D(pool_size=4,strides=4)(x)
    encoded = Conv1D(filters=512,kernel_size=4,activation=LeakyReLU(),padding='causal',bias_initializer=Constant(0.1),kernel_initializer=TruncatedNormal())(x)
    print('Encoded representation tensor shape:', encoded.shape)
    
    
    # define decoder convnet
    x = Conv1D(filters=256,kernel_size=4,activation=LeakyReLU(),padding='causal',bias_initializer=Constant(0.1),kernel_initializer=TruncatedNormal())(encoded)
    x = UpSampling1D(size=4)(x)
    x = Conv1D(filters=128,kernel_size=4,activation=LeakyReLU(),padding='causal',dilation_rate=2,bias_initializer=Constant(0.1),kernel_initializer=TruncatedNormal())(x)
    decoded = Conv1D(filters=1,kernel_size=4,activation=LeakyReLU(),padding='causal',dilation_rate=4,bias_initializer=Constant(0.1),kernel_initializer=TruncatedNormal())(x)
    print('Decoded representation tensor shape:', decoded.shape)
    
    
    # define overal autoencoder model
    cae = Model(inputs=input_img, outputs=decoded)
    cae.compile(optimizer='adam', loss='mse')
    
    # check for equal size
    # obs: the missing value is the batch_size
    if input_img.shape[1:] != decoded.shape[1:]: print('alert: in/out dimension mismatch')
    
    And, with no surprise, I get
    alert: in/out dimension mismatch
    
  • 相关阅读:
    Linux 在当前文件夹下查找某文件
    Linux 计算文件夹下内容大小【包含软链接的文件】
    《什么是生物信息学》摘录
    二分查找算法
    python之递归函数
    python之内置函数、匿名函数
    python之迭代器,生成器
    Python之文件操作
    基础数据类型的整理
    Python数据可视化—折线图
  • 原文地址:https://www.cnblogs.com/bonelee/p/9881155.html
Copyright © 2011-2022 走看看