在按照说明here进行操作之后,我试图将输入张量转换为自定义keras损失函数中的numpy数组。
以上代码在我的计算机上运行,没有错误。现在,我想使用输入张量中的值提取一个numpy数组。但是,出现以下错误:
“ tensorflow.python.framework.errors_impl.InvalidArgumentError:您 必须使用dtype float
输入占位符张量'input_1'的值 [[节点:input_1 = Placeholderdtype = DT_FLOAT,shape = [], _device =“ / job:localhost / replica:0 / task:0 / cpu:0”]]“
我需要转换为一个numpy数组,因为我还有其他必须在输入上运行的keras模型-我没有在joint_loss中显示下面的那些行,但是即使下面的代码示例也根本无法运行。
import numpy as np
from keras.models import Model, Sequential
from keras.layers import Dense, Activation, Input
import keras.backend as K
def joint_loss_wrapper(x):
def joint_loss(y_true, y_pred):
x_val = K.eval(x)
return y_true - y_pred
return joint_loss
input_tensor = Input(shape=(6,))
hidden1 = Dense(30, activation='relu')(input_tensor)
hidden2 = Dense(40, activation='sigmoid')(hidden1)
out = Dense(1, activation='sigmoid')(hidden2)
model = Model(input_tensor, out)
model.compile(loss=joint_loss_wrapper(input_tensor), optimizer='adam')
答案 0 :(得分:0)
我知道了!
您要做的是使用Keras的Functional API。
然后,可以将您的子模型输出为张量作为y_pred_submodel = submodel(x)
。
这类似于Keras层在张量上的操作方式。
仅在损失函数内操纵张量。那应该很好。