具有Lambda层的神经网络,用于色散方程的训练参数

时间:2019-06-25 18:31:56

标签: python tensorflow keras

我想训练一个网络,以获得链接到方程式的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)

0 个答案:

没有答案