###to keep the after-convoluted images have same size with original input, you should use 'same'
To build a really working demo, you should find some mature code from github....
# ======================================================================
# Generate dummy data:
import h5py
import numpy as np
Nsamples = 100
Nclasses = 2
dim = 39
data  = np.random.random((Nsamples, 1, dim, dim, dim))
target = np.random.random((Nsamples, dim, dim, dim))
target[target>=0.5] = 1
target[target<0.5] = 0
target = target.astype(int) # array containing randomly distributed 0 and 1 (represent the two classes)
# ======================================================================
# Define my model:
from keras.models import Sequential
model = Sequential()
from keras.layers.convolutional import Convolution3D, MaxPooling3D
model.add(Convolution3D(input_shape=(1,None,None,None), 
                        nb_filter=32, 
                        kernel_dim1=6, kernel_dim2=6, kernel_dim3=6, 
                        init='uniform', 
                        activation='relu', 
                        bias=True, 
                        border_mode='valid'))   ###to keep the after-convoluted images have same size with original input, you should use 'same'
                        
model.add(MaxPooling3D( pool_size=(2,2,2), 
                        strides=None, 
                        border_mode='valid'))   
                        
model.add(Convolution3D(nb_filter=32, 
                        kernel_dim1=4, kernel_dim2=4, kernel_dim3=4, 
                        init='uniform', 
                        activation='relu', 
                        bias=True, 
                        border_mode='valid'))
                        
model.add(MaxPooling3D( pool_size=(2,2,2), 
                        strides=None, 
                        border_mode='valid'))
                        
model.add(Convolution3D(nb_filter=32, 
                        kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, 
                        init='uniform', 
                        activation='relu', 
                        bias=True, 
                        border_mode='valid'))
                        
model.add(Convolution3D(nb_filter=32, 
                        kernel_dim1=3, kernel_dim2=3, kernel_dim3=3, 
                        init='uniform', 
                        activation='relu', 
                        bias=True, 
                        border_mode='valid'))
                        
model.add(Convolution3D(nb_filter=Nclasses, 
                        kernel_dim1=1, kernel_dim2=1, kernel_dim3=1, 
                        init='uniform', 
                        activation='linear',     ###linear should be 'sigmoid'
                        bias=True, 
                        border_mode='valid'))
  
                        
# ======================================================================                     
# Configure the training process:
model.compile(optimizer='sgd', loss='mse', metrics=['accuracy'])  
###'MSE' -- >  'binary_crossentropy'
# ======================================================================
# Run training process:
model.fit(data, target, nb_epoch=150, batch_size=1)