EDIT: Failed to reproduce this issue using cuda 8.0 and using titan X (Pascal)
Using tensorflow firewall for keras i have image_dim_ordering related problems. When I use image_dim_ordering = 'th' in the keras configuration file, everything works fine. But when I use 'tf', training just doesn’t greatly improve accuracy from 0.5.
The motivation is that currently my live improvements are very expensive, and I would like to remove an unnecessary change from the color agreement using anano to tensorflow.
I tried to recreate the problem with simple code to allow other people to play it back, which can help me understand what I'm doing wrong here. I know the channels, the height, the width of the various conventions well, and at least I think I can handle it.
While I did not fully reproduce my problem in a compact example (perhaps because it is a trivial task), the training results are repeatedly and much worse for the "tf" case, even when I try different seed values. Note. In this replay code, all the networks need to do is separate the full fixes from -1.0 from the full 1.0 patches
This is my '~ / .keras / keras.json'
{
"floatx": "float32",
"epsilon": 1e-07,
"backend": "tensorflow",
"image_dim_ordering": "th"
}
my tensorflow version is equal to `` 0.11.0rc0 '' (this happened at 0.10) my keras is the last git traction today.
'th' image_dim_ordering, >= 0.99 4 .
'tf' , >= 0,9 , , 24
, :
from keras import backend as K
import keras.optimizers
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense, Input
from keras.models import Model
import numpy as np
def make_model(input_dim_size):
if K.image_dim_ordering() == 'tf':
input_shape = (input_dim_size, input_dim_size,1)
else:
input_shape = (1, input_dim_size, input_dim_size)
img_input = Input(shape=input_shape)
x = Convolution2D(64,5,5,border_mode='same')(img_input)
x = Activation('relu')(x)
x = MaxPooling2D((2,2),strides=(2,2))(x)
x = Convolution2D(64, 5, 5, border_mode='same')(x)
x = Activation('relu')(x)
x = MaxPooling2D((2, 2), strides=(2, 2))(x)
x = Convolution2D(64, 5, 5, border_mode='same')(x)
x = Activation('relu')(x)
x = MaxPooling2D((2, 2), strides=(2, 2))(x)
x = Convolution2D(128, 5, 5, border_mode='same')(x)
x = Activation('relu')(x)
x = MaxPooling2D((2, 2), strides=(2, 2))(x)
x = Convolution2D(128, 5, 5, border_mode='same')(x)
x = Activation('relu')(x)
x = MaxPooling2D((2, 2), strides=(2, 2))(x)
x = Flatten()(x)
x = Dense(1024*2)(x)
x = Activation('relu')(x)
x = Dropout(0.5)(x)
x = Dense(1024 * 2)(x)
x = Activation('relu')(x)
x = Dropout(0.75)(x)
x = Dense(200)(x)
x = Activation('relu')(x)
x = Dropout(0.75)(x)
x = Dense(1,activation='sigmoid')(x)
model = Model(img_input, x)
learning_rate = 0.01
sgd = keras.optimizers.sgd(lr=learning_rate, momentum=0.9, nesterov=True)
model.summary()
model.compile(loss='binary_crossentropy',
optimizer=sgd,
metrics=['accuracy']
)
return model
np.random.seed(456)
def dummy_generator(mini_batch_size=64, block_size=100):
if K.image_dim_ordering() == 'tf':
tensor_X_shape = (mini_batch_size,block_size, block_size,1)
else:
tensor_X_shape = (mini_batch_size, 1, block_size, block_size)
X = np.zeros(tensor_X_shape, dtype=np.float32)
y = np.zeros((mini_batch_size, 1))
while True:
for b in range(mini_batch_size):
X[b, :, :, :] = (float(b % 2) * 2.0) - 1.0
y[b, :] = float(b % 2)
yield X,y
with K.tf.device('/gpu:2'):
K.set_session(K.tf.Session(config=K.tf.ConfigProto(allow_soft_placement=True, log_device_placement=False)))
MINI_BATCH_SIZE = 64
PATCH_SIZE = 100
model = make_model(PATCH_SIZE)
gen = dummy_generator(mini_batch_size=MINI_BATCH_SIZE,block_size=PATCH_SIZE)
model.fit_generator(gen, MINI_BATCH_SIZE*10,
100, verbose=1,
callbacks=[],
validation_data=None,
nb_val_samples=None,
max_q_size=1,
nb_worker=1, pickle_safe=False)
"tf" : ( ):
Epoch 1/100
640/640 [
Epoch 2/100
640/640 [
Epoch 3/100
640/640 [
Epoch 4/100
640/640 [
Epoch 5/100
640/640 [
Epoch 6/100
640/640 [
Epoch 7/100
640/640 [
Epoch 8/100
640/640 [
Epoch 9/100
640/640 [
Epoch 10/100
640/640 [
Epoch 11/100
640/640 [
Epoch 12/100
640/640 [
Epoch 13/100
640/640 [
Epoch 14/100
640/640 [
Epoch 15/100
640/640 [
Epoch 16/100
640/640 [
Epoch 17/100
640/640 [
Epoch 18/100
640/640 [
Epoch 19/100
640/640 [
Epoch 20/100
640/640 [
Epoch 21/100
640/640 [
Epoch 22/100
640/640 [
Epoch 23/100
640/640 [
Epoch 24/100
640/640 [
Epoch 25/100
640/640 [
Epoch 26/100
640/640 [
Epoch 27/100
640/640 [
"" ( ):
Epoch 1/100
640/640 [
Epoch 2/100
640/640 [
Epoch 3/100
640/640 [
Epoch 4/100
640/640 [
, case-, (0s), , , .
, , , , , 2-3 .
- , , , , :)