python - Tensorflow 2.0 无法识别张量形状

标签 python tensorflow machine-learning keras

我无法让我的 RNN 分类器处理我的输入数据。我正在使用带有滑动窗口的 TF 2.0 预发行版。

我正在尝试构建一个 RNN,它提供 5 个时间步长,每个时间步长有 6 个特征,并让它生成第 6 个时间步长作为目标。当我运行我的代码时,它给我一个错误,说输入是(无,6),而当我打印出我的训练数据时,它清楚地表明形状是(5,6)。我对如何解决这个问题感到非常困惑。

错误:

File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 734, in fit
    use_multiprocessing=use_multiprocessing)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit
    distribution_strategy=strategy)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 547, in _process_training_inputs
    use_multiprocessing=use_multiprocessing)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 593, in _process_inputs
    steps=steps)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2384, in _standardize_user_data
    all_inputs, y_input, dict_inputs = self._build_model_with_inputs(x, y)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2587, in _build_model_with_inputs
    self._set_inputs(cast_inputs)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2674, in _set_inputs
    outputs = self(inputs, **kwargs)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 772, in __call__
    self.name)
  File "C:\Users\employee\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\input_spec.py", line 177, in assert_input_compatibility
    str(x.shape.as_list()))
ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 6]

打印读数:

********************tf.Tensor(
[[0.07812838 0.08639083 0.07809999 0.08601701 0.6974719  0.6974719 ]
 [0.06794664 0.06995372 0.06220453 0.06934043 0.70064694 0.70064694]
 [0.08323035 0.08651368 0.07691107 0.08147305 0.69750804 0.69750804]
 [0.09781507 0.10009027 0.08847085 0.08919457 0.6944895  0.6944895 ]
 [0.12235662 0.12269666 0.11316498 0.11738694 0.6868     0.6868    ]], shape=(5, 6), dtype=float32)********************tf.Tensor([[0.08238748 0.09074993 0.07986343 0.09017278 0.6965872  0.6965872 ]], shape=(1, 6), dtype=float32)********************
/data comes in as an array of shape [737,6]

train=tf.data.Dataset.from_tensor_slices(features).window(6,1,1,drop_remainder=True).flat_map(lambda x: x.batch(6)).map(lambda window: (window[:-1],window[-1:]))

valid=train.take(200).shuffle(1000).repeat()
train=train.shuffle(3000).repeat()

for x,y in valid:
    print('*'*20+str(x)+"*"*20+str(y)+"*"*20)

print(train)


model = tf.keras.Sequential()

model.add(layers.SimpleRNN(128,batch_size=10))
model.add(layers.Dense(124,kernel_initializer='he_uniform',activation='softmax'))

model.compile(optimizer='adagrad', batch_size=10,step_size=.01, loss=tf.keras.losses.MeanAbsoluteError(), metrics=['accuracy'])



history = model.fit(train,epochs=100, validation_data=valid,steps_per_epoch=3000,validation_steps=1000)

最佳答案

模型需要一个等级为 3 的输入,但传递的却是一个等级为 2 的输入。

第一层是SimpleRNN,它期望数据的形式为(batch_size, timesteps, features),即rank 3。用户传递的数据的形状是(5, 6),即rank 2。

传递 3 级数据(包括批处理维度)将解决该问题。

关于python - Tensorflow 2.0 无法识别张量形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57695689/

相关文章:

hadoop - 通过MapReduce生成tfrecord时出错

python - 从 shell 运行 python 时如何避免打印不必要的信息?

machine-learning - 如何在PYTORCH中进行2层嵌套FOR循环?

machine-learning - 用于欺诈检测的特征工程

python - 有没有办法在 python 中使用断点?

python - 服从测试山羊 - 回溯

tensorflow - 张量板找不到事件文件

tensorflow - 自定义 DataGenerator tensorflow 错误 'ValueError: Failed to find data adapter that can handle input'

python - pyplot绘制子图的方法

python - 直接从缓冲区渲染 QWebView/QWebPage 中的 QImage?