【问题标题】:Is it possible to set keras layer output?是否可以设置keras层输出?
【发布时间】:2017-10-27 13:11:29
【问题描述】:

我需要修改第二个卷积层的最后一个特征图的输出。
或者如果可能的话,将数组添加到我的转换层输出中。
下面是我创建的 python 脚本和输出所需更改的示例。
感谢您的帮助!

import numpy as np
from keras import backend as K

num=18  
m=11  
n=50  
k=3  
np.random.seed(100)  
features = np.random.rand(num,m,n,k)

型号

input_shape=features.shape[1:]  
model = Sequential()  
model.add(Conv2D(2, kernel_size=(1, 3), strides=(1,1),activation='relu',input_shape=input_shape))  
model.add(Conv2D(21, kernel_size=(1, 48), strides=(1,1),padding="valid",activation='relu'))  
model.add(Conv2D(1, kernel_size=(1, 1), strides=(1, 1),activation='relu',padding="valid"))  
model.add(Dense(1, activation='softmax'))  
Adam = optimizers.Adam(lr=0.00003, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)  
model.compile(loss='mse',optimizer=Adam)  

get_1st_layer_output = K.function([model.layers[0].input],
[model.layers[1].output])  
layer_output = get_1st_layer_output([features])

设置 DESIRED layer_output 值
我需要在每个传播步骤都这样做。

for i in range(0,11):
    layer_output[0][0][i][0][20]=0.1
    print(layer_output[0][0][i][0][20])  

【问题讨论】:

    标签: python deep-learning keras keras-layer


    【解决方案1】:

    在这种情况下,我想我会使用带有常数张量的连接。不幸的是,我不能让它发挥作用,但我还是会分享我的工作,希望能帮助你。

    import numpy as np
    import keras
    from keras import backend as K
    from keras.models import Sequential
    from keras.layers import Conv2D, Dense, Concatenate
    from keras import optimizers
    
    num=18
    m=11
    n=50
    k=3
    np.random.seed(100)
    features = np.random.rand(num, m, n, k)
    
    custom_tensor = K.constant(0.1, shape=(11, 48, 1))
    
    input_shape = features.shape[1:]
    input = keras.Input(shape=input_shape)
    print(K.ndim(input))
    layer0 = Conv2D(2, kernel_size=(1, 3), strides=(1,1),activation='relu')(input)
    layer0_added = Concatenate(axis=-1)([layer0, custom_tensor])
    layer1 = Conv2D(20, kernel_size=(1, 48), strides=(1,1),padding="valid",activation='relu')(layer0_added)
    layer2 = Conv2D(1, kernel_size=(1, 1), strides=(1, 1),activation='relu',padding="valid")(layer1)
    layer3 = Dense(1, activation='softmax')(layer2)
    
    model = keras.models.model(layer0)
    Adam = optimizers.Adam(lr=0.00003, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
    model.compile(loss='mse', optimizer=Adam)
    

    它产生了一个错误

    ValueError: `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 11, 48, 2), (11, 48, 1)]
    

    但希望这对您有所帮助。

    【讨论】:

    • 您必须为批次中的每个样本提供自定义特征(额外的None 维度)。如果所有样本的特征都相同,则可以在该常量中使用K.repeat_elements
    • 但是我该怎么做呢?我找不到以None 作为第一维来初始化张量的方法。
    • 你可以试试“-1”,如果不行,你就用K.repeat_elements。 (需要一个功能性 API 模型)。
    猜你喜欢
    • 2023-03-21
    • 2020-12-27
    • 2020-04-20
    • 2021-04-29
    • 2019-05-19
    • 2014-05-12
    • 2017-01-21
    • 2019-05-22
    • 2020-03-08
    相关资源
    最近更新 更多