【发布时间】:2019-11-07 15:57:46
【问题描述】:
考虑以下 TensorFlow 代码:
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
mnist_dataset, mnist_info = tfds.load(name = 'mnist', with_info=True, as_supervised=True)
mnist_train, mnist_test = mnist_dataset['train'], mnist_dataset['test']
num_validation_samples = 0.1 * mnist_info.splits['train'].num_examples
num_validation_samples = tf.cast(num_validation_samples, tf.int64)
num_test_samples = mnist_info.splits['test'].num_examples
num_test_samples = tf.cast(num_test_samples, tf.int64)
def scale(image, label):
image = tf.cast(image, tf.float32)
image /= 255.
return image, label
scaled_train_and_validation_data = mnist_train.map(scale)
test_data = mnist_test.map(scale)
BUFFER_SIZE = 10_000
shuffled_train_and_validation_data = scaled_train_and_validation_data.shuffle(BUFFER_SIZE)
validation_data = shuffled_train_and_validation_data.take(num_validation_samples)
train_data = shuffled_train_and_validation_data.skip(num_validation_samples)
BATCH_SIZE = 100
train_data = train_data.batch(BATCH_SIZE)
validation_data = validation_data.batch(num_validation_samples) # Single batch, having size equal to number of validation samples
test_data = test_data.batch(num_test_samples)
validation_inputs, validation_targets = next(iter(validation_data))
input_size = 784 # One for each pixel of the 28 * 28 image
output_size = 10
hidden_layer_size = 50 # Arbitrary chosen
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28,1)),
tf.keras.layers.Dense(hidden_layer_size, activation='relu'), # First hidden layer
tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
tf.keras.layers.Dense(output_size, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
NUM_EPOCHS = 5
model.fit(train_data, epochs = NUM_EPOCHS, validation_data=(validation_inputs, validation_targets), verbose=2)
在运行时 tf 给出错误:
ValueError:
batch_size或steps是Tensor或NumPy输入数据。
在对fit()的调用中添加batch_size时:
model.fit(train_data, batch_size = BATCH_SIZE, epochs = NUM_EPOCHS, validation_data=(validation_inputs, validation_targets), verbose=2)
然后它抱怨:
ValueError:
batch_size参数不能指定为 给定的输入类型。收到的输入:,batch_size:100
这里有什么错误?
【问题讨论】:
-
您是否将完整代码复制到此处?我看到
BUFFER_SIZE=10_000、model.compile(optimize=...)这些错别字。请准确复制并粘贴导致您显示的错误的代码。 -
@zihaozhihao 为什么你认为这是一个错字?我已经从 Jupyter 笔记本中提取了代码 sn-ps。我省略了降价,因为这会使其过于冗长。
-
应该是优化器和10000
-
@zihaozhihao 数字支持下划线。见
PEP 515。虽然很好地抓住了优化器。该代码有效,因为compile()使用**kwargs接受多个参数。它忽略拼写错误的变量并继续使用默认优化器。解决了这个问题。谢谢
标签: python tensorflow keras