【发布时间】:2020-11-22 09:39:35
【问题描述】:
我一直在尝试创建一个能够识别不同歌唱技巧的模型。我得到了很好的结果,但我想用不同的优化器、层等进行不同的测试。但是,我无法得到可重现的结果。通过运行两次此模型训练:
num_epochs = 100
batch_size = 128
history = modelo.fit(X_train_f, Y_train, validation_data=(X_test_f,Y_test), epochs=num_epochs, batch_size=batch_size, verbose=2)
我可以在第一次运行时获得 25% 的准确率,然后在第二次运行时达到 34%。然后,如果我将优化器从“sgd”更改为“adam”,我将得到 99%。如果我回到之前的“sgd”优化器,它让我在第二次运行时获得了 34%,我会得到 100% 或类似的东西。我不明白为什么。
我已经尝试了很多我在类似问题中读到的东西。以下几行显示了我如何尝试使我的代码可重现,这些实际上是我整个代码的第一行:
import numpy as np
import tensorflow as tf
import random as rn
import os
#https://stackoverflow.com/questions/57305909/tensorflow-keras-reproducibility-problem-on-google-colab
os.environ['PYTHONHASHSEED']=str(5)
np.random.seed(5)
rn.seed(12345)
session_conf = tf.compat.v1.ConfigProto(intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
tf.compat.v1.set_random_seed(1234)
sess = tf.compat.v1.Session(graph=tf.compat.v1.get_default_graph(), config=session_conf)
tf.compat.v1.keras.backend.set_session(sess)
问题是,我对上面不起作用的代码做错了什么(正如我所提到的)?
这里是我创建训练集的地方:
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.convolutional import Conv1D, MaxPooling1D
from keras.layers.core import Dense, Flatten
from keras.layers import BatchNormalization,Activation
from keras.optimizers import SGD, Adam
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size=0.2, random_state=2)
我的模特:
from tensorflow.keras import layers
from tensorflow.keras import initializers
input_dim = X_train_f.shape[1]
output_dim = Y_train.shape[1]
modelo = Sequential()
modelo.add(Conv1D(filters=6, kernel_initializer=initializers.glorot_uniform(seed=5), kernel_size=5, activation='relu', input_shape=(40, 1))) # 6
modelo.add(MaxPooling1D(pool_size=2))
modelo.add(Conv1D(filters=16, kernel_initializer=initializers.glorot_uniform(seed=5), kernel_size=5, activation='relu')) # 16
modelo.add(MaxPooling1D(pool_size=2))
modelo.add(Flatten())
modelo.add(Dense(120, kernel_initializer=initializers.glorot_uniform(seed=5), activation='relu')) # 120
modelo.add(Dense(84, kernel_initializer=initializers.glorot_uniform(seed=5), activation='relu')) # 84
modelo.add(Dense(nclases, kernel_initializer=initializers.glorot_uniform(seed=5), activation='softmax'))
sgd = SGD(lr=0.1)
#modelo.compile(loss='categorical_crossentropy',
# optimizer='adam',
# metrics=['accuracy'])
modelo.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
modelo.summary()
modelo.input_shape
【问题讨论】:
-
您好,欢迎来到 StackOverflow。您能否扩展您的问题以寻求具体帮助?现在的问题似乎太笼统了,不清楚要问什么。
-
@Cninroh 感谢您的欢迎。我刚刚编辑了这个问题,希望现在更清楚,可以得到一些帮助:)
标签: python tensorflow machine-learning keras deep-learning