使用 Tensorflow 训练模型的输入数组形状应该是啥

Posted

技术标签:

【中文标题】使用 Tensorflow 训练模型的输入数组形状应该是啥【英文标题】:What should be the input array shape for training models with Tensorflow使用 Tensorflow 训练模型的输入数组形状应该是什么 【发布时间】:2019-09-15 22:49:20 【问题描述】:

我正在按照https://www.tensorflow.org/alpha/tutorials/keras/overfit_and_underfit 上给出的使用 Tensorflow 训练神经网络的教程步骤进行操作

在训练数据上运行拟合函数时遇到输入形状有问题的ValueError。

模型架构:

NUM_WORDS = 10000
baseline_model = keras.Sequential([
    keras.layers.Dense(16, activation = 'relu',input_shape(NUM_WORDS,)),
    keras.layers.Dense(16, activation = 'relu'),
    keras.layers.Dense(1, activation = 'sigmoid')
])

baseline_model.compile(optimizer='adam', 
                       loss='binary_crossentropy', 
                       metrics=['accuracy', 'binary_crossentropy'])
baseline_model.summary()

baseline_history = baseline_model.fit(train_data, 
                                      train_labels, 
                                      epochs=20, 
                                      batch_size=512, 
                                      validation_data=(test_data, test_labels), 
                                      verbose=2)

----------------------------------- ---------------------------- ValueError Traceback(最近一次调用 最后)在 4批次大小=512, 5 验证数据=(测试数据,测试标签), ----> 6 详细=2)

~/env_tensorflow2_alpha/lib/python3.6/site-packages/tensorflow/python/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) 第816章 817 步=验证步骤, --> 818 steps_name='validation_steps') 819 elif validation_split 和 0.

~/env_tensorflow2_alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py 在 _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size、check_steps、steps_name、steps、validation_split、shuffle、 extract_tensors_from_dataset)2594 feed_input_shapes, 2595 check_batch_axis = False,#不强制批处理 尺寸。 -> 2596 exception_prefix='input') 2597 2598 如果 y 不是 None:

~/env_tensorflow2_alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py 在standardize_input_data(数据,名称,形状,check_batch_axis, 异常前缀) 347 ': 预期 ' + names[i] + ' 具有形状 ' + 348 str(shape) + ' 但得到了形状为 ' + 的数组 --> 349 str(data_shape)) 350返回数据 351

ValueError:检查输入时出错:预期的 dense_21_input 有 形状 (10000,) 但得到了形状 (1,) 的数组

train_data 和 train_labels 具有以下形状:

print("Train data shape: ", train_data.shape)
print("Train label shape: ", train_labels.shape)

训练数据形状:(25000, 10000) 训练标签形状:(25000,)

为什么会出现错误,是否需要为输入数组中的 batch_size 提供另一个维度?

我正在使用 Tensorflow 版本:2.0.0-alpha0 提前致谢!!

【问题讨论】:

【参考方案1】:

代码对我来说看起来非常好,除了一行中的一个小错误,

keras.layers.Dense(16, activation = 'relu',input_shape(NUM_WORDS,))

你错过了=,所以它应该是,

keras.layers.Dense(16, activation = 'relu',input_shape=(NUM_WORDS,))

我能够在 google colab 空间中运行相同的代码而没有错误。

希望这会有所帮助!

【讨论】:

谢谢。我花了一段时间才发现这一点。

以上是关于使用 Tensorflow 训练模型的输入数组形状应该是啥的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Tensorflow 中输入形状的值

如何在TensorFlow中向CNN输入多个序列?

如何在 Keras 中的预训练 InceptionResNetV2 模型的不同层中找到激活的形状 - Tensorflow 2.0

模型预测:不兼容的形状

如何将样式转移 tensorflow 模型转换为具有灵活输入形状的 mlmodel?

了解 TensorFlow LSTM 输入形状