有没有大手子帮忙看看为毛我把这段tensorflow的代码翻成kera...

Tips:点击图片进入下一页

就是最基本的那个全链接NN识别mnist的代码
tf代码是抄的:
import time
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print("Download Done!")
millis = int(round(time.time() * 1000))

x = tf.placeholder(tf.float32, [None, 784])

# paras
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])

# loss func
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

# init
init = tf.initialize_all_variables()

config = tf.ConfigProto(
        device_count = {"GPU": 1,"CPU":0}
    )

with tf.Session() as sess:
        sess.run(init)
        # train
        for i in range(10000):
            batch_xs, batch_ys = mnist.train.next_batch(100)
            sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

        correct_prediction = tf.equal(tf.arg_max(y, 1), tf.arg_max(y_, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

        print("Accuarcy on Test-dataset: ", sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

millis2 = int(round(time.time() * 1000))
print(millis2 - millis);


keras代码是我照着TF自己翻译的
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras import optimizers
from keras.datasets import mnist
from keras.utils.np_utils import to_categorical
import matplotlib.pyplot as plt
import numpy as np
(x_train, y_train), (x_test, y_test) = mnist.load_data("mnist.pkl.gz")
print(np.shape(x_train))
print(np.shape(y_train))
print(np.shape(x_test))
print(np.shape(y_test))
x_train=np.reshape(x_train,(60000,-1)).astype(np.float32)/255
y_train=to_categorical(y_train,10).astype(np.float32)
x_test=np.reshape(x_test,(10000,-1)).astype(np.float32)/255
y_test=to_categorical(y_test,10).astype(np.float32)

model=Sequential()
model.add(Dense(10,input_shape=(28*28,)))
model.add(Activation("softmax"))

model.compile("sgd",loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train,y_train,batch_size=100,epochs=10000,verbose=2)
print(np.shape(x_test))
print(np.shape(y_test))
rate=model.evaluate(x_test,y_test,128)


print(model.metrics_names)
print(rate[0],"  ",rate[1]);


TF 8秒不用就完了
keras慢的一比,为毛?哪里犯傻了?都用的gpu算的。






网友评论:
理解了点
epoch并不是100的轮数。而是整个60000个数据的轮数。

前面tf的循环很简单就是100*10000个训练。
这边相应的应该减少一些。
但是还是差很远
前面的tf结果
Accuarcy on Test-dataset:  0.9162
时间是10964毫秒

后面改成epoch=16了
["loss", "acc"]
0.3343072810649872    0.909
时间是36829毫秒,而且精度不如tf
话说回来keras弄nmist网上要多少有多少随便拔一份就完了啊……

不自己写一遍不知道自己有多蠢
兄弟,你的learning rate呢?

要想懂底层就从activation function, gd之类的才好玩啊,什么skilearn啊,tensorflow,之类的都太高层了

要想会用keras的话,就直接在他家tutorial上cp就好了....

keras?默认值啊
我查了下是0.01
迫真机器/深度学习论坛
毕竟作为高级封装,支持的又不只是tensorflow;让它和tensorflow比速度真的难为它了…Keras可以让你专心来搭模型的啊,搭起来之后可以了 再考虑速度的问题啊
还有输入…可以考虑用下tf.data做input,解决输入变换 感觉速度会快些?(瞎猜)

封装慢个100%之内可以理解,慢几倍就不大理解了。
不过我下午把LeNet-5的tf识别mnist的代码翻译成keras倒是速度还可以