繁体   English   中英

python CNN,为什么我在不同的桌面上得到不同的结果?我该怎么做才能在不同的机器上得到相同的结果

[英]python CNN,why i get different results in different desktop?what can i do to get the same result in different machine

我运行相同的代码和相同的数据集来训练 CNN(卷积神经网络)和仅使用 CPU(无 GPU)。 我已经设置了随机种子,这样每次运行代码时我都可以在一台机器上得到相同的结果。

种子值= 0

导入操作系统

os.environ['PYTHONHASHSEED']=str(seed_value)

os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

随机导入

随机种子(种子值)

将 numpy 导入为 np

np.random.seed(seed_value)

但是我不知道为什么当我在不同的机器上运行相同的代码时结果不同。我该怎么办? 代码是同胞:

def CNNGETPREDICTVAL(train_xx,train_yy,test_xx,inner_fac_len,loop_lr,nvl_val_1,nvl_val_2,nvl_val_3,loop_dst_num): train_xx=train_xx.drop('date_time',axis=1) test_xx=test_xx.drop(['date_time','key_0' ],轴=1)

x_train = train_xx.values.reshape(-1, 1,inner_fac_len,1)
y_train=keras.utils.np_utils.to_categorical(train_yy, num_classes = 3)
x_test = test_xx.values.reshape(-1, 1,inner_fac_len,1)

model = keras.models.Sequential()
init_info=keras.initializers.RandomNormal(mean=0.0,stddev=0.05,seed=2021)
model.add(keras.layers.Conv2D(nvl_val_1, (1, 3), activation='relu',padding='same', input_shape=(1, inner_fac_len, 1),kernel_initializer=init_info))
model.add(keras.layers.MaxPooling2D(pool_size=(1, 3)))

model.add(keras.layers.Conv2D(nvl_val_2, (1, 3), activation='relu',padding='same',kernel_initializer=init_info))
model.add(keras.layers.MaxPooling2D(pool_size=(1, 3)))

model.add(keras.layers.Conv2D(nvl_val_3, (1, 3), activation='relu',padding='same',kernel_initializer=init_info))
model.add(keras.layers.MaxPooling2D(pool_size=(1, 3)))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(loop_dst_num, activation='relu',kernel_initializer=init_info))
model.add(keras.layers.Dense(3, activation='softmax',kernel_initializer=init_info))

my_optimizer =tf.optimizers.Adam(learning_rate=loop_lr)
model.compile(optimizer=my_optimizer, loss='mse')

model.fit(x_train, y_train, batch_size=512, epochs=10)
result = model.predict(x_test,batch_size=512,verbose=0)

return result

您正在使用 Keras,因此除了 python、random 和 numpy 种子之外,您还应该修复其后端随机种子。 如果您使用 tensorflow 作为后端(默认为 tensorflow,但可能是 theano):

# Seed value
# Apparently you may use different seed values at each stage
seed_value= 0

# 1. Set `PYTHONHASHSEED` environment variable at a fixed value
import os
os.environ['PYTHONHASHSEED']=str(seed_value)

# 2. Set `python` built-in pseudo-random generator at a fixed value
import random
random.seed(seed_value)

# 3. Set `numpy` pseudo-random generator at a fixed value
import numpy as np
np.random.seed(seed_value)

# 4. Set the `tensorflow` pseudo-random generator at a fixed value
import tensorflow as tf
tf.random.set_seed(seed_value)
# for later versions: 
# tf.set_random_seed(seed_value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM