Tensorflow 带有手写数字的简单机器学习示例不适用于conv2d和MAXPOOLG2D

Tensorflow 带有手写数字的简单机器学习示例不适用于conv2d和MAXPOOLG2D,tensorflow,machine-learning,max-pooling,Tensorflow,Machine Learning,Max Pooling,我用tensorflow 2简单地学习了这段代码,一切都很好 # 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_tra

我用tensorflow 2简单地学习了这段代码,一切都很好

# 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等检测层。我必须在哪里添加这些图层?这会影响我的绘图和预测吗?

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

x_列和x_测试具有形状 [BatchSize,28,28]但它应该是[BatchSize,28,28,1]。 因此,我们最后将使用np.expand_dims添加通道维度

是的,它会影响你的计划和预测

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

尽管如此,当我们有像500*500这样大尺寸的图像时,我们必须应用卷积和maxpool层,通过只选择重要的特征来减少特征

若我们在500*500的输入上应用平坦和密集函数,那个么程序必须初始化大量的权重,你们可能会得到内存错误

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')
])