我正在学习Keras,所以我做了一些简单的伪代码,无法理解如何对密集层进行尺寸标注以匹配输入和输出数据的尺寸。
我的输入数据是一个长度为10的数组,输出是长度为5:
np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
np.array([1, 2, 3, 4, 5]
当我将输入层配置为
input_shape=(10,)
有这行:
model.add(Dense(units=10, input_shape=(10,), activation='relu'))
我收到此错误:
检查输入时出错:预期density_1_input具有形状(10,),但获得形状为(1,)的数组
如果我想将输入解释为2个长度为5的数组
input_shape=(2,1)
我收到此错误:
检查输入时出错:预期density_1_input具有3个维度,但是形状为(10,1)的数组
请注意,在之前的错误声明中,它声明输入数组的形状为(1,)
,但现在它说该数组的形状为(10,)
当我不更改输入数据时,为什么将输入形状识别为其他形状?
(1,)
暗示input_shape应该描述输入数据的维数,但是第二个错误暗示(10,)
描述数据的长度。
我在这里阅读了文档:https://keras.io/layers/core/,但是重要的参数input_shape
没有文档
import sys
import numpy as np
def DataGenerator():
while True:
yield (np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
np.array([1, 2, 3, 4, 5]) )
def main():
import tensorflow as tf
import keras as K
from keras.models import Sequential
model = Sequential()
from keras.layers import Dense
#imput layer size 10
model.add(Dense(units=10, input_shape=(1,), activation='relu'))
#Output layer size 5
model.add(Dense(units=5, activation='sigmoid',))
model.compile( optimizer='adam' , loss='mean_squared_error')
model.summary()
model.fit_generator(DataGenerator(),
steps_per_epoch=10000, epochs=10)
Print ("Ok")
if __name__ == "__main__":
main()
该代码似乎可以使用
input_shape=(1,)
但它会在最后一层引发此错误:
检查目标时出错:预期密集_2的形状为(5,),但数组的形状为(1,)
我找不到有关如何描述输出层以匹配数据的文档。我以为,由于最后一层产生5个数字,所以会自动对长度为5的数组供稿进行检查。
它在哪里记录或解释?