我在一个更复杂的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),但没有帮助。我很困惑。
答案 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()