我想训练一个网络,以获得链接到方程式的3参数输出。损失函数将根据输出方程计算。
我已经编写了一个函数来进行从3个参数到201点方程的转换,然后从该函数构建一个Lambda层(参见代码)
我正在尝试使用keras后端编写tensorflow兼容函数,但不确定是否这是这样做的方法。代码给了我这个错误:
InvalidArgumentError:找到2个根本错误。 (0)无效的参数:维度0的切片索引1超出范围。 [[{{node lambda_2 / strided_slice_1}}] (1)无效的参数:维度0的切片索引1超出范围。 [[{{node lambda_2 / strided_slice_1}}] [[metrics / mean_squared_error / Identity / _77]] 0次成功操作。 忽略0个派生错误。
def Fano(x):
w = np.linspace(1,data_refl.shape[1],data_refl.shape[1]);
delta = K.zeros([w.shape[0],])
eq = K.zeros([w.shape[0],])
w0 = K.zeros([1,])
q = K.zeros([1,])
g = K.zeros([1,])
w2 = K.ones([w.shape[0],])
w2 = w2*w
g = x[0];
w0 = x[1];
q = x[2];
delta = (w2-w0[0])/g[0];
eq = (q[0]+delta)**2/(1+delta**2);
return eq
def block(input_tensor,nb_nodes):
x = Dense(num_hidden)(input_tensor)
x = LeakyReLU()(x)
return x
num_hidden = 200;
input_shape = (data_para.shape[1],)
inputs = Input(shape=input_shape)
block1 = block(inputs,data_para.shape[1])
block2 = block(block1,num_hidden)
dense1 = Dense(3)(block2)
outputs = Lambda(lambda x:Fano(x))(dense1)