tensorflow:Model 是用形状 (None, 4, 1) 构建的,但它在形状不兼容的输入 (4, 1, 1) 上被调用

时间:2021-03-20 20:42:18

标签: tensorflow tensorflow-datasets

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

train_data = np.array(
[[ 0.045964252,  0.08585282,   0.056468535,  0.087974496],
 [ 0.06128449,   0.027692182, 0.01929527,   0.027361592],
 [ 0.076604135,  0.,           0.,           0.         ],
 [-0.15014096,  -0.6869674,   -0.6869674,    0.         ]], np.float32)

train_label= np.array(
[[0.08585282 ],
 [0.027692182],
 [0.         ],
 [0.036714412]], np.float32)
 
mydataset = tf.data.Dataset.from_tensor_slices((train_data, train_label))
 
myinput = tf.keras.layers.Input(shape=(4, 1), ragged=True)
output = tf.keras.layers.Dense(1)(myinput)
model = tf.keras.models.Model(inputs=myinput, outputs=output)

model.compile(
    optimizer='sgd',
    loss='mse',
    metrics=[tf.keras.metrics.MeanSquaredError()])
    
print("model.fit mydatasetelement_spec:\n", mydataset.element_spec)  
# (TensorSpec(shape=(4,), dtype=tf.float32, name=None), TensorSpec(shape=(1,), dtype=tf.float32, name=None))

history = model.fit(
    mydataset,
    epochs=4, 
    steps_per_epoch=4, 
    verbose=0) 

如何通过修正模型输入层来消除警告?

<块引用>

警告:tensorflow:模型是用形状 (None, 4, 1) 构建的,用于 输入张量("Placeholder_1:0", shape=(None, 4, 1), dtype=float32), 但它在形状不兼容的输入上被调用 (4, 1, 1)

我似乎无法让 tf.keras.layers.Input 接受来自 model.fit 的输入而不抛出警告。我不想更改我的数据(重塑、挤压等)。我想将输入保留为具有特征和标签的数据集。我想调整模型以接受我的数据输入。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式修复它:

myinput = tf.keras.layers.Input(shape=(1,), ragged=True)

注意 Dense 层的输入形状应为以下形式:(batch_size, input_size)