我正在研究一个深度学习模型,我试图将两个不同模型的输出结合起来:
整体结构是这样的:
所以第一个模型采用一个矩阵,例如 [ 10 x 30 ]
#input 1
input_text = layers.Input(shape=(1,), dtype="string")
embedding = ElmoEmbeddingLayer()(input_text)
model_a = Model(inputs = [input_text] , outputs=embedding)
# shape : [10,50]
Run Code Online (Sandbox Code Playgroud)
现在第二个模型需要两个输入矩阵:
X_in = layers.Input(tensor=K.variable(np.random.uniform(0,9,[10,32])))
M_in = layers.Input(tensor=K.variable(np.random.uniform(1,-1,[10,10]))
md_1 = New_model()([X_in, M_in]) #new_model defined somewhere
model_s = Model(inputs = [X_in, A_in], outputs = md_1)
# shape : [10,50]
Run Code Online (Sandbox Code Playgroud)
我想让这两个矩阵像在 TensorFlow 中一样可训练,我能够通过以下方式做到这一点:
matrix_a = tf.get_variable(name='matrix_a',
shape=[10,10],
dtype=tf.float32,
initializer=tf.constant_initializer(np.array(matrix_a)),trainable=True)
Run Code Online (Sandbox Code Playgroud)
我不知道如何使这些 matrix_a 和 matrix_b 可训练,以及如何合并两个网络的输出然后给出输入。
我经历了这个 问题但找不到答案,因为他们的问题陈述与我的不同。
到目前为止我尝试过的是:
#input 1
input_text = layers.Input(shape=(1,), dtype="string")
embedding …Run Code Online (Sandbox Code Playgroud) 我想在Python中实现自定义丢失函数,它应该像这个伪代码一样工作:
aux = | Real - Prediction | / Prediction
errors = []
if aux <= 0.1:
errors.append(0)
elif aux > 0.1 & <= 0.15:
errors.append(5/3)
elif aux > 0.15 & <= 0.2:
errors.append(5)
else:
errors.append(2000)
return sum(errors)
Run Code Online (Sandbox Code Playgroud)
我开始像这样定义指标:
def custom_metric(y_true,y_pred):
# y_true:
res = K.abs((y_true-y_pred) / y_pred, axis = 1)
....
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获得if和else的res值.另外我想知道什么必须返回功能.
谢谢