0

我使用此代码使用 tensorflow 2 进行了简单的 KI 学习,一切正常。

# Install TensorFlow
import tensorflow as tf
print(tf.__version__)
# Import matplotlib library
import matplotlib.pyplot as plt 

#Import numpy
import numpy as np

#Dataset
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
          loss='sparse_categorical_crossentropy',
          metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
print("Evaluation");
model.evaluate(x_test,  y_test)

plt.imshow(x_train[6], cmap="gray") # Import the image
plt.show() # Plot the image
predictions = model.predict([x_train]) # Make prediction
print("Vorhersage: ", np.argmax(predictions[6])) # Print out the number
print("Correct is: ", y_train[6])

我的问题是如何添加 Conv2d 和 MaxPooling2D 等检测层。我必须在哪里添加这些图层,这会影响我的绘图和预测吗?

4

1 回答 1

1

在将输入传递给 Convolution2d 和 maxpool2d 之前,输入必须具有 4 个维度。

x_train 和 x_test 的形状为 [BatchSize, 28, 28] 但它应该是 [BatchSize, 28, 28, 1]。所以我们最后要添加通道维度np.expand_dims()

x_train = np.expand_dims(x_train, -1)  
x_test = np.expand_dims(x_test, -1)  

model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), padding="same", input_shape=(None, 28, 28, 1)),
tf.keras.layers.Activation("relu"),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])

是的,它会影响你的绘图和预测。

与密集层相比,卷积层使用较少的权重,然后 Maxpool 将采用仅具有最大值的特征进行预测。这将减少您的功能,因为这可能是您的准确性会降低。

虽然,当我们有像 500*500 这样的大尺寸图像时,我们必须应用卷积层和最大池层来通过仅选择重要特征来减少特征。

如果我们对 500*500 的输入应用 flatten 和 dense 函数,那么程序必须初始化大量的权重,你会得到 Out Of Memory 错误。

于 2020-02-09T19:37:42.437 回答