Keras在极其简单的测试代码中拟合了ValueError

时间:2019-05-16 15:22:44

标签: keras

我在一个更复杂的Keras程序中遇到了一个非常持久的问题,但将其归结为:答案必须非常简单,但我找不到它。

运行此代码时:

def __init__ (self):
    self.model = Sequential()
    self.model.add(Dense(4, input_shape=(4,), activation='linear'))
    self.model.compile(optimizer='adam', loss='mse')
def run(self):
    x = [1., 1., 1., 1.]
    print('x:', x, 'x shape:', np.shape(x))
    y = [0., 0., 0., 0.]
    print('y:', y, 'y shape:', np.shape(y))
    self.model.fit(x, y, batch_size=1, epochs=1, verbose=2)

打印语句显示x和y均为形状(4,),但拟合线会生成:

  

ValueError:检查输入时出错:预期density_1_input具有   形状(4,),但数组的形状为(1,)

我尝试将x重塑为(1,4),但没有帮助。我很困惑。

2 个答案:

答案 0 :(得分:0)

您传递的x和y数组的形状不正确。如果要为模型输入形状为(4,)的张量,则必须准备形状为(n,4)的张量,其中n是要提供的示例数。

import tensorflow as tf
import numpy as np
from keras.models import Model, Sequential
from keras.layers import Input, Dense


class Mymodel(tf.keras.Model):
  def __init__ (self):
      super(Mymodel, self).__init__()
      self.model = Sequential()
      self.model.add(Dense(4, input_shape=(4,), activation='linear'))
      self.model.compile(optimizer='adam', loss='mse')

  def run(self):
      x = np.ones((1,4))
      print('x:', x, 'x shape:', np.shape(x))
      y = np.zeros((1,4))
      print('y:', y, 'y shape:', np.shape(y))
      self.model.fit(x, y, batch_size=1, epochs=1, verbose=2)


model = Mymodel()
model.run()

答案 1 :(得分:0)

数据应为2D。 用x = [[1., 1., 1., 1.]]将x和y数据设为2D。它成为1x4数据。 1是数据数,而4是您定义为input_shape的维度。 并且,通过x = np.array(x)将其设为numpy数组。 Keras的fit方法需要numpy array。我从https://keras.io/models/model/看了x: Numpy array of training data

import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

class A:
    def __init__ (self):
        self.model = Sequential()
        self.model.add(Dense(4, input_shape=(4,), activation='linear'))
        self.model.compile(optimizer='adam', loss='mse')

    def run(self):
        x = [[1., 1., 1., 1.]]
        print('x:', x, 'x shape:', np.shape(x))
        y = [[0., 0., 0., 0.]]
        print('y:', y, 'y shape:', np.shape(y))
        x = np.array(x)
        y = np.array(y)
        self.model.fit(x, y, batch_size=1, epochs=1, verbose=2)

a = A()
a.run()