Python Keras vs.TensorFlow。超参数不相同?
我正在转变为我自己的纯洁 不幸的是,有点不对劲。在我的脚本上进行的训练要快得多(如此之快,在某个地方可能会出现错误),而损失并没有改善。我想这和我的超参数有关。。。但我想不出来 我对术语有点困惑,Python Keras vs.TensorFlow。超参数不相同?,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我正在转变为我自己的纯洁 不幸的是,有点不对劲。在我的脚本上进行的训练要快得多(如此之快,在某个地方可能会出现错误),而损失并没有改善。我想这和我的超参数有关。。。但我想不出来 我对术语有点困惑,samples\u pr\u epoch等等,但我想我已经掌握了。第二个for循环正确吗 有人知道有什么不同吗?这是在凯拉斯的掩护下吗 原始代码: 我的代码: 我会检查Keras和TensorFlow中Adam优化器的默认参数……而且,我不明白这意味着更快的速度意味着什么?坏吗?谢谢,我去看看。正常情况
samples\u pr\u epoch
等等,但我想我已经掌握了。第二个for循环正确吗
有人知道有什么不同吗?这是在凯拉斯的掩护下吗
原始代码:
我的代码:
我会检查Keras和TensorFlow中Adam优化器的默认参数……而且,我不明白这意味着更快的速度意味着什么?坏吗?谢谢,我去看看。正常情况下,训练网络需要几天时间,现在只需几分钟。损失也几乎没有减少,也许应该指出这一点。我认为这与Adam中的参数无关。它看起来是一样的。我会检查Keras和TensorFlow中Adam优化器的默认参数……而且,我不明白这意味着更快的速度意味着什么?坏吗?谢谢,我去看看。正常情况下,训练网络需要几天时间,现在只需几分钟。损失也几乎没有减少,也许应该指出这一点。我认为这与Adam中的参数无关。看起来一模一样。
def gen(hwm, host, port):
for tup in client_generator(hwm=hwm, host=host, port=port):
X, Y, _ = tup
Y = Y[:, -1]
if X.shape[1] == 1: # no temporal context
X = X[:, -1]
yield X, Y
def get_model(time_len=1):
ch, row, col = 3, 160, 320 # camera format
model = Sequential()
model.add(Lambda(lambda x: x/127.5 - 1., # Normalize
input_shape=(ch, row, col),
output_shape=(ch, row, col)))
model.add(Convolution2D(16, 8, 8, subsample=(4, 4), border_mode="same"))
model.add(ELU())
model.add(Convolution2D(32, 5, 5, subsample=(2, 2), border_mode="same"))
model.add(ELU())
model.add(Convolution2D(64, 5, 5, subsample=(2, 2), border_mode="same"))
model.add(Flatten())
model.add(Dropout(.2))
model.add(ELU())
model.add(Dense(512))
model.add(Dropout(.5))
model.add(ELU())
model.add(Dense(1))
model.compile(optimizer="adam", loss="mse")
return model
if __name__ == "__main__":
tf.reset_default_graph()
sess = tf.Session()
model = get_model()
model.fit_generator(
gen(20, args.host, port=args.port), # Batch size 200
samples_per_epoch=10000,
nb_epoch=args.epoch,
validation_data=gen(20, args.host, port=args.val_port), # Batch size 200
nb_val_samples=1000
)
init = tf.global_variables_initializer()
sess.run(init)
def gen(hwm, host, port):
for tup in client_generator(hwm=hwm, host=host, port=port):
X, Y, _ = tup
Y = Y[:, -1]
if X.shape[1] == 1: # no temporal context
X = X[:, -1]
yield X, Y
def conv2d(x, W, s):
return tf.nn.conv2d(x, W, strides=[1,s,s,1], padding="SAME")
def weight_variable(shape):
return tf.Variable(tf.truncated_normal(shape, stddev=0.1))
def bias_variabel(shape):
return tf.Variable(tf.constant(0.1, shape=shape))
def sig2d(x):
return tf.nn.sigmoid(x, name='Sigmoid-normalization')
if __name__ == "__main__":
tf.reset_default_graph()
sess = tf.Session()
xs = tf.placeholder(tf.float32, [None, 153600])
x_image = tf.reshape(xs, [-1, 160, 320, 3])
ys = tf.placeholder(tf.float32, [None, 1])
x_image = tf.nn.sigmoid(x_image, name='Sigmoid-normalization')
# conv1
W_conv1 = weight_variable([8,8,3,16])
b_conv1 = bias_variabel([16])
h_conv1 = tf.nn.elu(conv2d(x_image, W_conv1, 4) + b_conv1)
# conv2
W_conv2 = weight_variable([5,5,16,32])
b_conv2 = bias_variabel([32])
h_conv2 = tf.nn.elu(conv2d(h_conv1, W_conv2, 2) + b_conv2)
# conv3
W_conv3 = weight_variable([5,5,32,64])
b_conv3 = bias_variabel([64])
h_conv3 = tf.nn.elu(conv2d(h_conv2, W_conv3, 2) + b_conv3)
# flat1
shape = h_conv3.get_shape().as_list()
flat1 = tf.reshape(h_conv3, [-1, shape[1]*shape[2]* shape[3]])
# drop1
drop1 = tf.nn.dropout(flat1, 0.2)
# elu1
elu1 = tf.nn.elu(drop1)
# dense1
dense1 = tf.layers.dense(elu1, 512)
# drop2
drop2 = tf.nn.dropout(dense1, 0.5)
# elu2
elu2 = tf.nn.elu(drop2)
# dense2
output = tf.layers.dense(elu2, 1) # output
loss = tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(ys, output))))
train = tf.train.AdamOptimizer().minimize(loss,
sess.run(tf.global_variables_initializer())
for i in range(args.epoch):
for j in range(args.epochsize/args.batch_size):
batch_xs, batch_ys = next(gen(20, args.host, port=args.port)) # Batch size 200
batch_xs = np.reshape(batch_xs,(-1,153600))
sess.run(train, feed_dict={xs: batch_xs, ys: batch_ys})