一、安装anaconda
直接官网下载安装,https://www.anaconda.com/。
之前没有安过python的,直接在安装过程中添加环境变量就行,下面两个选项都选,安装过的不选第一个,只选第二个。
没有勾选第一个的,添加修改环境变量。
之前安装过的python环境改为anaconda。
我之前下载的是python3.9.0,装在prgram files里面,像下面一样修改。
可以选择把之前下载的python卸载了,利用之前下的安装exe卸载,比较干净。
二、安装tensflow和keras
1.准备工作
keras最高支持到3.6,直接下载的anaconda里python版本为3.8,不支持。所以创建个虚拟环境,里面python用3.6的版本
利用命令行conda create -n python36 python=3.6下载虚拟环境,-n 后面的python36只是个名字,可以改,不要包含中文及大写字母、空格之类的。
中间有个让选择y/n,选择y,下完之后,并且打开anaconda下的env可以看到出现python36,这个文件夹的名字是上面安装的时候设置的:
如果之后想卸载,命令为conda remove -n env_name --all。下面是安装虚拟环境后,出现的文件夹。
这个时候输入conda env list可以看到出现了python36,base是安装anaconda自带的版本,也就是3.8的版本。
2.利用pip安装库
首先把环境调到python36下面,输入activate python36,上一步改名了的就输入activate ***(自己设置的名字),之后命令前面会出现(python36)。
对于tensorflow,因为是集显没有NVIDIA显卡,所以直接安装CPU版本的,安装命令为pip install tensflow-cpu,同样等待安装,如果需要指定版本,可以输入pip install tensflow-cpu==×.×。
安装好tensorflow之后再安装keras:
pip install keras,等着安装。
2.检查一下
三、pycharm设置
文件-设置-项目-python解释器,小齿轮点添加,
系统解释器,点三个小点点添加,选择前面的anaconda\envs\python36下的python.exe,确认,应用即可
最后看下keras的backend是不是tensorflow,一般默认是的,不会有问题。在.keras\keras.json,用记事本打开,看到backend是tensorflow。
完成。
四、检验一下
最后用B站课程上 深度学习超全项目合集 上的变分自编码器检验一下。
下面展示一些 内联代码片
。
import numpy as np
import matplotlib.pyplot as plt
from keras.layers import Input, Dense, Lambda
from keras.models import Model
from keras import backend as K # 用来定义一些函数
from keras import objectives # 训练的目标函数
from keras.datasets import mnist # 手写数据识别
batch_size = 100
original_dim = 784 # 28*28
intermediate_dim = 256 # 第二个全连接层的输入是256
latent_dim = 2 # 输出维度为2
epochs = 50 # 迭代层数
# encoder部分
x = Input(shape=(original_dim,))
h = Dense(intermediate_dim, activation='relu')(x) # 输入维度会自动根据x指定,只需要指定输出维度
z_mean = Dense(latent_dim)(h) # 隐藏层,输出均值(2维)
z_log_var = Dense(latent_dim)(h) # 隐藏层,输出方差(2维)
# Lambda层,不参与训练,只是计算
def sampling(args):
z_mean, z_log_var = args
epsilon = K.random_normal(shape=(batch_size, latent_dim), mean=0.) # 100 *2, 均值为0的标准正态分布
return z_mean + K.exp(z_log_var / 2) * epsilon
z = Lambda(sampling, output_shape=(latent_dim,))([z_mean, z_log_var])
# decoder部分
decoder_h = Dense(intermediate_dim, activation='relu')
decoder_mean = Dense(original_dim, activation='sigmoid')
h_decoded = decoder_h(z)
x_decoded_mean = decoder_mean(h_decoded)
# 定义总损失函数
def vae_loss(x, x_decoded_mean):
xent_loss = original_dim * objectives.binary_crossentropy(x, x_decoded_mean)
kl_loss = -0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1)
return xent_loss + kl_loss
vae = Model(x, x_decoded_mean)
vae.compile(optimizer='rmsprop', loss=vae_loss)
# 训练
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_train.shape[1:])))
vae.fit(x_train, x_train, shuffle=True, epochs=epochs,
batch_size=batch_size, validation_data=(x_test, x_test))
# 生成新的x
encoder = Model(x, z_mean)
x_test_encoded = encoder.predict(x_test, batch_size=batch_size)
plt.figure(figsize=(6, 6))
plt.scatter(x_test_encoded[:, 0], x_test_encoded[:, 1], c=y_test)
plt.colorbar()
plt.show()
decoder_input = Input(shape=(latent_dim,))
_h_decoded = decoder_h(decoder_input)
_x_decoded_mean = decoder_mean(_h_decoded)
generator = Model(decoder_input, _x_decoded_mean)
n = 20
digit_size = 28
figure = np.zeros((digit_size * n, digit_size * n))
grid_x = np.linspace(-4, 4, n)
grid_y = np.linspace(-4, 4, n)
for i, xi in enumerate(grid_x):
for j, yi in enumerate(grid_y):
z_sample = np.array([[yi, xi]])
x_decoded = generator.predict(z_sample)
digit = x_decoded[0].reshape(digit_size, digit_size)
figure[(n - i - 1) * digit_size: (n - i) * digit_size,
j * digit_size: (j + 1) * digit_size] = digit
plt.figure(figsize=(10, 10))
plt.imshow(figure)
plt.show()
看到正常从keras下载了mnist数据集,训练,并预测。
完成。