Python 为什么Keras输入(shape=)需要dim=100向量的shape(1,)呢

Python 为什么Keras输入(shape=)需要dim=100向量的shape(1,)呢,python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我仍然试图围绕keras.Input()的shape=参数进行思考-为了测试目的,我尝试进行最简单的虚拟网络和输入: import keras import numpy as np def build_model(shape): f_input = keras.Input(shape=(shape[1],)) # (100,) d1 = keras.layers.Dense(50, activation='tanh')(f_input) softmax = keras

我仍然试图围绕
keras.Input()
shape=
参数进行思考-为了测试目的,我尝试进行最简单的虚拟网络和输入:

import keras
import numpy as np

def build_model(shape):
    f_input = keras.Input(shape=(shape[1],))  # (100,)
    d1 = keras.layers.Dense(50, activation='tanh')(f_input)
    softmax = keras.layers.Dense(10, activation='softmax')(d1)
    return keras.Model(f_input, softmax)

data = np.random.random((1000, 100))
model = build_model(data.shape)
model.compile(loss='mse', optimizer='SGD')
model.fit(x=data, y=data)
但keras仍然提出了错误:
ValueError:检查目标时出错:预期密集型_2具有形状(1,),但获得具有形状(100,)的数组。

我做错了什么?我的形状被定义为(,100),因为我期望一个任意批量大小的向量,其尺寸为100,如keras文档中所述。为什么会出现这种ValueError错误?我完全希望数组的形状是(100,)还是不是我是否必须在更改数据之前更改其形状


有什么提示吗

问题不在于您的输入形状。您以完全正确的方式给出了输入形状。问题在于,在
模型期间,您传递的是
(1000*100)
维度向量,而不是
(1100)
维度向量,而不是y

import numpy as np

def build_model(shape):
    f_input = keras.layers.Input(shape=(shape[1],))  # (100,)
    d1 = keras.layers.Dense(50, activation='tanh')(f_input)
    softmax = keras.layers.Dense(10, activation='softmax')(d1)
    return keras.Model(f_input, softmax)

data = np.random.random((1000, 100))
model = build_model(data.shape)
model.compile(loss='mse', optimizer='SGD')
model.fit(x=data, y=np.random.random((1000,))) #Change this to your actual y array!!

这对我来说运行很好。

问题不在于您的输入形状。您以完全正确的方式给出了输入形状。问题在于,在
模型期间,您传递的是
(1000*100)
维度向量,而不是
(1100)
维度向量,而不是y

import numpy as np

def build_model(shape):
    f_input = keras.layers.Input(shape=(shape[1],))  # (100,)
    d1 = keras.layers.Dense(50, activation='tanh')(f_input)
    softmax = keras.layers.Dense(10, activation='softmax')(d1)
    return keras.Model(f_input, softmax)

data = np.random.random((1000, 100))
model = build_model(data.shape)
model.compile(loss='mse', optimizer='SGD')
model.fit(x=data, y=np.random.random((1000,))) #Change this to your actual y array!!
这对我来说很好