使用 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 训练模型的输入数组形状应该是啥的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Keras 中的预训练 InceptionResNetV2 模型的不同层中找到激活的形状 - Tensorflow 2.0