I've got a keras model with the layout below
def keras_model(x_train, y_train, x_test, y_test):
    model = Sequential()
    model.add(Dense(128, input_dim=x_train.shape[1], activation='relu'))
    model.add(Dense(256,activation='relu'))
    model.add(Dense(512,activation='relu'))
    model.add(Dense(256,activation='relu'))
    model.add(Dense(128,activation='relu'))
    #model.add(Dense(10,activation='relu'))
    model.add(Dense(y_train.shape[1], activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam')
    monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=5, verbose=1, mode='auto')
    checkpointer = ModelCheckpoint(filepath="best_weights.hdf5", verbose=0, save_best_only=True) # save best model
    model.fit(x_train ,y_train, validation_data=(x_test, y_test),callbacks=[monitor,checkpointer], verbose=2,epochs=1000)
    model.load_weights('best_weights.hdf5') # load weights from best model
    return model
Trained on data from open-ai gym cartpole game and the model saved. The next step is to use the trained model to make predictions
from keras.models import load_model
model = load_model('data/model-v0.h5')
action = random.randrange(0,2)
import gym
env = gym.make("CartPole-v0")
env.reset()
>>> array([ 0.02429215, -0.00674185, -0.03713565, -0.0046836 ])
import random
action = random.randrange(0,2)
observation, reward, done, info = env.step(action)
observation.shape
>>> (4,)
new_observation, reward, done, info = env.step(action)
prev_obs = new_observation
prev_obs
>>> array([-0.00229585,  0.15330146,  0.02160273, -0.30723955])
prev_obs.shape
>>> (4,)
model.predict(prev_obs)
>>>
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-25-943f2f44ed64> in <module>()
----> 1 model.predict(prev_obs)
c:\users\samuel\appdata\local\programs\python\python35\lib\site-packages\keras\engine\training.py in predict(self, x, batch_size, verbose, steps)
   1145                              'argument.')
   1146         # Validate user data.
-> 1147         x, _, _ = self._standardize_user_data(x)
   1148         if self.stateful:
   1149             if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0:
c:\users\samuel\appdata\local\programs\python\python35\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
    747             feed_input_shapes,
    748             check_batch_axis=False,  # Don't enforce the batch size.
--> 749             exception_prefix='input')
    750 
    751         if y is not None:
c:\users\samuel\appdata\local\programs\python\python35\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    135                             ': expected ' + names[i] + ' to have shape ' +
    136                             str(shape) + ' but got array with shape ' +
--> 137                             str(data_shape))
    138     return data
    139 
ValueError: Error when checking input: expected dense_1_input to have shape (4,) but got array with shape (1,)
The shape of the observation is similar that of the training data used, the issue is even as you can see as the observation and the prev_observation has a shape of (4,) but when fed into the model to predict throws an error and claims the input has a shape of (1,).
I have tried even reshaping it with
prev_obs.shape = (4,)
prev_obs.reshape((4,))
but it still throws the same error.
 
    