在 wsl2 上使用 gpu 的 tensorflow 没有学习

tensorflow using gpu on wsl2 is not learning

我在 wsl2 运行ning 上使用 Ubuntu 20.04 在 win11 上。执行代码如下:

import tensorflow as tf
from tensorflow import keras
from keras.layers.convolutional import Conv2D, MaxPooling2D
import numpy as np

(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(2500, input_shape=(784,), activation='relu'),
    keras.layers.Dense(2000, activation='relu'),
    keras.layers.Dense(1500, activation='relu'),
    keras.layers.Dense(1000, activation='relu'),
    keras.layers.Dense(500, activation='relu'),
    keras.layers.Dense(10, activation='sigmoid')
])

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

print(model.summary())

model.fit(X_train, y_train, epochs=500)

如果我运行 CPU 上的代码输出如下:

Epoch 205/500
1875/1875 [==============================] - 80s 43ms/step - loss: 0.1887 - accuracy: 0.9466
Epoch 206/500
1875/1875 [==============================] - 79s 42ms/step - loss: 0.3433 - accuracy: 0.9484
Epoch 207/500
1875/1875 [==============================] - 79s 42ms/step - loss: 0.1987 - accuracy: 0.9690
Epoch 208/500
1875/1875 [==============================] - 80s 43ms/step - loss: 0.2632 - accuracy: 0.9582

但是如果我 运行 在 docker(tensorflow/tensorflow:latest-gpu-py3-jupyter) 上使用相同的代码,输出如下:

Epoch 205/500
60000/60000 [==============================] - 45s 752us/sample - loss: 9.5371 - accuracy: 0.0987
Epoch 206/500
60000/60000 [==============================] - 45s 749us/sample - loss: 9.5371 - accuracy: 0.0987
Epoch 207/500
60000/60000 [==============================] - 45s 749us/sample - loss: 9.5371 - accuracy: 0.0987
Epoch 208/500
60000/60000 [==============================] - 45s 745us/sample - loss: 9.5371 - accuracy: 0.0987

精度不变。

安装基于:

在安装过程中我没有遇到任何错误。

还有一点就是在gpu上编译模型耗时很长(超过5分钟)

提前感谢任何help/idea。

你应该减少神经元、层的数量并在 Dense(10) 中使用 softmax,因为你有多类输出。