【问题标题】:keras multi dimensions input to simpleRNN: dimension mismatchkeras 多维度输入到 simpleRNN:维度不匹配
【发布时间】:2017-07-25 07:21:17
【问题描述】:

输入元素有 3 行,每行有 199 列,输出有 46 行和 1 列

Input.shape, output.shape
((204563, 3, 199), (204563, 46, 1))

当给出输入时,会抛出以下错误:

from keras.layers import Dense
from keras.models import Sequential
from keras.layers.recurrent import SimpleRNN

model = Sequential()
model.add(SimpleRNN(100, input_shape = (Input.shape[1], Input.shape[2])))
model.add(Dense(output.shape[1], activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
model.fit(Input, output, epochs = 20, batch_size = 200)

抛出错误:

Epoch 1/20

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-134-378dd431cf45> in <module>()
      3 model.add(Dense(y_target.shape[1], activation = 'softmax'))
      4 model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
----> 5 model.fit(X_input, y_target, epochs = 20, batch_size = 200)
.
.
.
ValueError: Error when checking model target: expected dense_6 to have 2 dimensions, but got array with shape (204563, 46, 1)

请说明问题的原因和可能的解决方案

【问题讨论】:

    标签: python-3.x machine-learning keras mismatch


    【解决方案1】:

    问题在于SimpleRNN(100) 返回一个形状为(204563, 100) 的张量,因此,Dense(46)(因为output.shape[1]=46)将返回一个形状为(204563, 46) 的张量,但您的y_target 的形状为@987654327 @。需要去掉最后一个维度,比如y_target = np.squeeze(y_target),这样维度就一致了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2017-12-20
      相关资源
      最近更新 更多