win10 RTX30系列显卡 安装tensorflow-gpu 1.15
以下内容基本参考Win10 RTX30系列 安装tensorflow1.15
众所周知,RTX30系列的显卡,针对 TensorFlow1.x 很不友好,除了在Ubuntu系统中可以使用专门的那个版本外,在win10上想要使用TensorFlow1.x GPU版本几乎基本是不现实的,偶然看到上面这边博客里面分享了win10下使用GPU版 TensorFlow1.15,于是我也测试了一下,发现是可以的。
我的显卡为3060 Ti
具体安装步骤如下:
1.安装cuda和cudnn,推荐使用conda安装省心,不会和系统已有的cuda及cudnn发生冲突。
conda install cudatoolkit=11.2 -c conda-forge
conda install cudnn=8.1.0 -c conda-forge
2.安装知乎大佬编译好的的tensorflow-gpu 1.15,注意numpy版本需要1.18.5
pip install tensorboard==1.15 -i https://mirrors.aliyun.com/pypi/simple
pip install numpy==1.18.5 -i https://mirrors.aliyun.com/pypi/simple
pip install "tensorflow-1.15.4+nv-cp37-cp37m-win_amd64.whl"
安装完成测试:
import tensorflow as tf
from numpy.random import RandomState
# 定义训练数据batch的大小
batch_size = 8
# 定义神经网络参数
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
# 在shape的一个维度上使用None可以方便使用不同的batch大小
x = tf.placeholder(tf.float32, shape=(None,2), name='x-input')
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input')
# 前向传播
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 损失函数和反向传播
y = tf.sigmoid(y)
cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y, 1e-10, 1.0))
+ (1-y_)*tf.log(tf.clip_by_value(1-y, 1e-10, 1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
# 随机生成一个模拟数据集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
# 定义规则来给出样本标签, x1+x2<1的样例都认为是正样例,其他为负。
Y = [[int(x1+x2 < 1)] for (x1,x2) in X]
# 创建一个会话来运行Tensorflow程序
with tf.Session() as sess:
init_go = tf.global_variables_initializer()
# 初始化变量
sess.run(init_go)
# 训练之前的参数
print('parameter w1 before train: ', sess.run(w1))
print('parameter w2 before train: ', sess.run(w2))
STEPS = 1000
for i in range(STEPS):
# 每次迭代取batch_size个样本进行训练
start = (i*batch_size) % dataset_size
end = min(start+batch_size, dataset_size)
# 通过训练样本训练神经网络并更新参数
sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
if i%1000 == 0:
# 每隔1000步计算所有数据集上的交叉熵并输出
total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_: Y})
print('After %d training_steps, cross entropy on all data is %g'%(i,total_cross_entropy))
# 训练之后的参数
print('parameter w1 after train: ', sess.run(w1))
print('parameter w2 after train: ', sess.run(w2))
print("\ntensorflow版本为{}".format(tf.__version__))