python - Lambda 层中的自定义函数失败,无法将张量转换为 numpy

标签 python tensorflow machine-learning neural-network keras

所以我尝试使用 Keras(Tensorflow 后端)中的 Lambda 层实现自定义函数。

我想将输入张量转换为 numpy 数组来执行我的函数。但是,我无法运行tensor.eval(),因为它会抛出错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'input_1' with dtype float and shape [?,960,960,1]

这是我的代码:

def tensor2np(tensor):
    return tensor.eval(session=K.get_session())

def np2tensor(np):
    return tf.convert_to_tensor(np.reshape((1,480,480,3)))

def calculate_dwt1(tensor):
    np_input = tensor2np(tensor)
    coeff = pywt.wavedec2((np_input[0,:,:,0]), 'db1', level=1)
    return np2tensor(np.dstack((coeff[1][0],coeff[1][1],coeff[1][2])))




def network():

    input = Input(shape=(960,960,1), dtype='float32')
    conv1 = Convolution2D(64, (3,3), activation='relu', padding='same')(input)
    conv1 = Convolution2D(64, (3,3), activation='relu', padding='same')(conv1)
    pool1 = MaxPooling2D((2,2), strides=(2,2))(conv1)

    conv2 = Convolution2D(128, (3, 3), activation='relu', padding='same')(pool1)
    conv2 = Convolution2D(128, (3, 3), activation='relu', padding='same')(conv2)
    lambda1 = Lambda(calculate_dwt1)(input)
    me = merge((lambda1, conv2),mode='concat', concat_axis=3)
    ..
    ..

或者我可以在运行时获取自定义函数的结果并将其转换为张量并将其输入到我的网络中吗?

基本上,我正在尝试实现这个模型架构。 Model Architecture

最佳答案

事实上,您要求网络通过 a) 数组-> 张量转换和 b) 在数组上运行的黑盒函数进行反向传播。显然,它无法做到这一点并不奇怪。您需要使用标准(或自定义)TF/K 操作重写自定义函数,并将其应用于张量对象。然后,也只有这样,它才能够向后传播梯度并向前传播值。

关于python - Lambda 层中的自定义函数失败,无法将张量转换为 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569568/

相关文章:

machine-learning - 批量归一化而不是输入归一化

python - 使用nltk进行通用同义词和词性处理

python - Keras 重新定义输入形状

machine-learning - 为什么 TensorFlow 为 TensorBoard 可视化中的变量创建额外的 namespace ?

machine-learning - 训练神经网络时对批量数据进行混洗

python - 在for循环中增加x的值

python - 使用 PyArrow 从多个文件中读取分区的 parquet 数据集,并根据文件名添加分区键

python - 完成测试后使用分类模型预测重新填充数据框的替代方法?

python - 使用Python进行Elasticsearch多重查询/搜索

arrays - 具有 RGB 输入和 BW 二进制输出的 CNN