【问题标题】:Input incompatible with layers - Tensorflow输入与图层不兼容 - Tensorflow
【发布时间】:2021-11-20 16:19:20
【问题描述】:

我目前面临无法解决的 Tensorflow 库问题。我在 stackoverflow 上找到的所有解决方案都没有帮助我理解真正的问题。

def build_model(dim_data, n_neurons):

model = tf.keras.Sequential(name="Reseau_de_neurones")

model.add(layers.Dense(units = n_neurons, input_shape=(3, 1), bias_initializer="glorot_uniform")) 
model.add(layers.ReLU())
model.add(layers.Dense(units = n_neurons, input_shape=(dim_data,), bias_initializer="glorot_uniform")) 
model.add(layers.ReLU())
model.add(layers.Dense(units = n_neurons, input_shape=(dim_data,),  bias_initializer="glorot_uniform")) 
model.add(layers.ReLU())
model.add(layers.Dense(units = n_neurons, input_shape=(dim_data,), bias_initializer="glorot_uniform")) 
model.add(layers.ReLU())
model.add(layers.Dense(units = dim_data - 1, bias_initializer="glorot_uniform")) 

return model

然后我构建我的神经网络:

model = build_model(dim_data=3, n_neurons=10)

然后我定义一个训练步骤:

def train_step(model):

   with tf.GradientTape() as tape:
    pos = [0,0]
    controle_actuel = model(np.array([0,pos[0],pos[1]]))
    loss_value = loss
   gradients = tape.gradient(loss_value, model.trainable_variables)
   return loss_value, gradients

当我尝试这个功能时,我得到了这个错误

input 0 of layer "dense_37" is incompatible with the layer: expected min_ndim=2, found ndim=1. Full shape received: (3,)

你能帮帮我吗?

【问题讨论】:

  • 首先,中间层不需要指定输入形状。无论如何,您的输入形状为(3,),但您已将第一层输入指定为(3,1)。尝试更改第一层输入形状,例如input_shape=(3,)

标签: python tensorflow layer


【解决方案1】:

如果您想保持输入形状不变,只需使用np.expand_dims 为您的数据添加额外的维度:

import tensorflow as tf
import numpy as np

def build_model(dim_data, n_neurons):

  model = tf.keras.Sequential(name="Reseau_de_neurones")

  model.add(tf.keras.layers.Dense(units = n_neurons, input_shape=(3, 1), bias_initializer="glorot_uniform")) 
  model.add(tf.keras.layers.ReLU())
  model.add(tf.keras.layers.Dense(units = n_neurons, input_shape=(dim_data,), bias_initializer="glorot_uniform")) 
  model.add(tf.keras.layers.ReLU())
  model.add(tf.keras.layers.Dense(units = n_neurons, input_shape=(dim_data,),  bias_initializer="glorot_uniform")) 
  model.add(tf.keras.layers.ReLU())
  model.add(tf.keras.layers.Dense(units = n_neurons, input_shape=(dim_data,), bias_initializer="glorot_uniform")) 
  model.add(tf.keras.layers.ReLU())
  model.add(tf.keras.layers.Dense(units = dim_data - 1, bias_initializer="glorot_uniform")) 

  return model

model = build_model(dim_data=3, n_neurons=10)
def train_step(model):

   with tf.GradientTape() as tape:
    pos = [0,0]
    data = np.expand_dims(np.array([0,pos[0],pos[1]]), axis=1)
    controle_actuel = model(data)
    loss_value = controle_actuel
   gradients = tape.gradient(loss_value, model.trainable_variables)
   return loss_value, gradients

train_step(model)

否则,只需将模型的输入形状更改为一个暗淡而不是两个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多