Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么keras theano后端的性能优于tensorflow?_Tensorflow_Keras_Deep Learning_Theano - Fatal编程技术网

为什么keras theano后端的性能优于tensorflow?

为什么keras theano后端的性能优于tensorflow?,tensorflow,keras,deep-learning,theano,Tensorflow,Keras,Deep Learning,Theano,我刚刚开始了我的第一个深度学习项目,以熟悉keras和tf。 这是一个多标签分类问题,我使用一个简单的卷积网络从XRD图谱中识别单个化合物 我花了一些时间,但结果真的让我大吃一惊。我没想到我的简单网络在准确性方面表现得那么好 然后我意识到我一直在使用theano作为后端。 所以我用tensorflow做了另一次尝试,同样的输入数据产生了糟糕的结果。甚至比随机森林分类器更糟糕 我几乎不知道那里发生了什么事。 我想我做错了什么,但我就是想不出是什么 无论如何,下面是代码(下面提供了输入数据…) Th

我刚刚开始了我的第一个深度学习项目,以熟悉keras和tf。 这是一个多标签分类问题,我使用一个简单的卷积网络从XRD图谱中识别单个化合物

我花了一些时间,但结果真的让我大吃一惊。我没想到我的简单网络在准确性方面表现得那么好

然后我意识到我一直在使用theano作为后端。 所以我用tensorflow做了另一次尝试,同样的输入数据产生了糟糕的结果。甚至比随机森林分类器更糟糕

我几乎不知道那里发生了什么事。 我想我做错了什么,但我就是想不出是什么

无论如何,下面是代码(下面提供了输入数据…)

Theano_vs_TF.py:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import os

os.environ['KERAS_BACKEND']='theano'

from keras.models import Model
from keras.models import Sequential
import keras as K

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

X=np.loadtxt('X.txt')
Y=np.loadtxt('Y.txt')

X3d = np.expand_dims(X, axis=-1)

# start with TF-model
tf_model = keras.Sequential()
wreg = tf.keras.regularizers.l2(l=0) # dont use for now

tf_model.add(layers.Conv1D(32, 8,strides=8, padding='same',
                        input_shape=(180,1), activation='relu',kernel_regularizer=wreg))

tf_model.add(layers.Conv1D(32, 5,strides=5, padding='same', 
                        activation='relu',kernel_regularizer=wreg))

tf_model.add(layers.Conv1D(16, 3,strides=3, padding='same', 
                        activation='relu',kernel_regularizer=wreg))

tf_model.add(layers.Flatten())
tf_model.add(layers.Dense(512,activation='relu',kernel_regularizer=wreg))
tf_model.add(layers.Dense(29, activation='sigmoid',kernel_regularizer=wreg))

tf_optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)

tf_model.compile(loss='binary_crossentropy',
              optimizer=tf_optimizer,
              metrics=['accuracy'],
              )

tf_model.summary()

# train tf-model
tf_history = tf_model.fit(X3d,Y,batch_size=128, 
                    epochs=50, verbose=1,validation_split=0.3,
                   )

plt.plot(tf_history.history['accuracy'])
plt.plot(tf_history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.show()

# now compare to theano model
th_model = Sequential() #old way
wreg = K.regularizers.l2(l=0.0) # 1e-3 was way too much, no hints for overfitting so far

th_model.add(K.layers.Conv1D(32, 8,strides=8, padding='same',
                          input_shape=(180,1), activation='relu', 
                          kernel_regularizer=wreg))

th_model.add(K.layers.Conv1D(32, 5,strides=5, 
                          padding='same', activation='relu',kernel_regularizer=wreg))

th_model.add(K.layers.Conv1D(16, 3,strides=3, padding='same', activation='relu',kernel_regularizer=wreg))
th_model.add(K.layers.Flatten())
th_model.add(K.layers.Dense(512,activation='relu',kernel_regularizer=wreg))
th_model.add(K.layers.Dense(29, activation='sigmoid'))


#Define optimizer        
optimizer = K.optimizers.adam(lr=1e-3)

# Compile model
th_model.compile(loss='binary_crossentropy',
              optimizer=optimizer,
              metrics=['accuracy'],

              )

th_model.summary()

# train th model and plot metrics
th_history = th_model.fit(X3d,Y,batch_size=128, 
                    epochs=50, verbose=1,validation_split=0.3,
                   )

plt.plot(th_history.history['acc'])
plt.plot(th_history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.show()
Uguu链接(将在24小时后过期)

Tensorflow学习曲线:

Theano学习曲线:

这很奇怪。您可以尝试显式地为层参数指定初始化方案,尽管我认为Keras应该为所有层参数使用相同的默认值。结果是否可以重复?你可以尝试修正Theano和TensorFlow的随机种子,并尝试不同的种子,看看差异是否一致。我刚刚尝试了tf和Theano中glorot初始化器的不同种子。当然有一些差异,但tf的性能仍然远远低于这一水平,这是非常奇怪的。您可以尝试显式地为层参数指定初始化方案,尽管我认为Keras应该为所有层参数使用相同的默认值。结果是否可以重复?你可以尝试修正Theano和TensorFlow的随机种子,并尝试不同的种子,看看差异是否一致。我刚刚尝试了tf和Theano中glorot初始化器的不同种子。当然有一些差异,但tf性能仍然远低于theano