python - Keras 模型通过编译但在运行时因值错误而崩溃

标签 python numpy tensorflow machine-learning keras

我正在尝试创建一个基本的 RNN,用于计算看到的 1 的数量并返回总和。这是我第一次尝试制作 RNN,而且我对 ML 和 Keras 还很陌生,因此非常感谢任何帮助或建议!

我研究了该模型,发现使用嵌入层将一维数据输入 LSTM。这使得模型能够正确编译,但是一旦尝试执行第一个纪元,它就会崩溃。

values = []
answers = []
for i in range(0,5):
    random = randint(1,101)
    values.append([int(x) for x in bin(random)[2:]])
    answers.append(len([ones for ones in values[-1] if ones==1]))
values = np.array(values)
print("shape:",values.shape[0])
print("values:",values)
print("answers:",answers)

RNN = layers.LSTM
model = Sequential()
model.add(layers.Embedding(1, 1, input_length = 1))
model.add(RNN(1,return_sequences=True))
model.add(layers.Flatten())
model.add(layers.Dense(1, activation="relu"))

adam = optimizers.adam(lr=0.01)
model.compile(optimizer=adam,
             loss="mean_squared_error")

print (model.summary())
model.fit(values,np.array(answers),epochs=5)

输出:

shape: 5
values: [list([1]) list([1, 0, 1, 1, 1, 1, 0]) list([1, 1, 0, 0, 1])
 list([1, 1, 0, 1]) list([1, 0, 0, 0, 1, 0])]
answers: [1, 5, 3, 3, 2]

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_6 (Embedding)      (None, 1, 1)              1         
_________________________________________________________________
lstm_33 (LSTM)               (None, 1, 1)              12        
_________________________________________________________________
flatten_19 (Flatten)         (None, 1)                 0         
_________________________________________________________________
dense_62 (Dense)             (None, 1)                 2         
=================================================================
Total params: 15
Trainable params: 15
Non-trainable params: 0
_________________________________________________________________
None
Epoch 1/5
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

这些层非常基本,并且在 Flatten() 的帮助下可以很好地相互连接。然而,在运行代码时,我收到一个值错误,但我不太明白为什么。

ValueError                                Traceback (most recent call last)
<ipython-input-129-f5e242474ef9> in <module>
     11 
     12 print (model.summary())
---> 13 model.fit(values,np.array(answers),epochs=5)

~\Anaconda3\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
   1037                                         initial_epoch=initial_epoch,
   1038                                         steps_per_epoch=steps_per_epoch,
-> 1039                                         validation_steps=validation_steps)
   1040 
   1041     def evaluate(self, x=None, y=None,

~\Anaconda3\lib\site-packages\keras\engine\training_arrays.py in fit_loop(model, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)
    197                     ins_batch[i] = ins_batch[i].toarray()
    198 
--> 199                 outs = f(ins_batch)
    200                 outs = to_list(outs)
    201                 for l, o in zip(out_labels, outs):

~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in __call__(self, inputs)
   2713                 return self._legacy_call(inputs)
   2714 
-> 2715             return self._call(inputs)
   2716         else:
   2717             if py_any(is_tensor(x) for x in inputs):

~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in _call(self, inputs)
   2653                 array_vals.append(
   2654                     np.asarray(value,
-> 2655                                dtype=tf.as_dtype(tensor.dtype).as_numpy_dtype))
   2656         if self.feed_dict:
   2657             for key in sorted(self.feed_dict.keys()):

~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
    536 
    537     """
--> 538     return array(a, dtype, copy=False, order=order)
    539 
    540 

ValueError: setting an array element with a sequence.

如果有人有更好的方法来格式化模型/数据或一般建议,请评论或回答。

最佳答案

问题出在 values = np.array(values) 行。在不同长度的列表上调用 np.array 会创建一个奇怪的 numpy 对象数组(不是数字)结构,这些对象是其他带有数字的 numpy 数组。这最终会给出 ValueError

每个数据批处理必须由相同长度的序列组成。如果您不希望 RNN 处理不同长度的序列,这确实是可能的,但您需要添加掩蔽(Ctrl+F 用于 Keras documentation 中的“掩蔽”,并且可能比 更复杂一些顺序

关于python - Keras 模型通过编译但在运行时因值错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57865460/

相关文章:

python - 在 emacs python 模式中不正确地退出缩进

python - 将非方形邻接矩阵导入Networkx python

javascript - 如何在 tensorflow.js 中广播矩阵/向量点积

python - 我的 TensorFlow 输入函数出现错误 : "TypeError: List of Tensors when single Tensor expected"

python - PyQt:添加选项卡

python - 从字符串中删除每个非 utf-8 符号

python-2.7 - 如何为图像像素调用添加条件? numpy opencv

Python用完整列表填充列表中缺失的条目

python-3.x - 为什么在 tensorflow 中出现这个错误?

python - 如何实现只执行 "K"次的冒泡排序