Я пытаюсь использовать тензорную доску в керасе. Вот мой код:
from keras.layers import merge, Dropout, Convolution2D, MaxPooling2D, Input, Dense, Flatten, Merge
from keras.models import Model
from keras.callbacks import EarlyStopping, ReduceLROnPlateau,TensorBoard
import pickle
from sklearn.utils import shuffle
import numpy as np
import random
from keras.optimizers import Adam
import tensorflow as tf
import keras.backend.tensorflow_backend as KTF
np.random.seed(1000)
def load_pickled_data(file, columns):
with open(file, mode='rb') as f:
dataset = pickle.load(f)
return tuple(map(lambda c: dataset[c], columns))
train_preprocessed_dataset_file = "train.p"
test_preprocessed_dataset_file = "test.p"
X_train, y_train_64 = load_pickled_data(train_preprocessed_dataset_file, columns = ['features', 'labels'])
X_test, y_test_64 = load_pickled_data(test_preprocessed_dataset_file, columns = ['features', 'labels'])
y_train = y_train_64.astype(np.float32)
y_test = y_test_64.astype(np.float32)
old_session = KTF.get_session()
with tf.Graph().as_default():
session = tf.Session('')
KTF.set_session(session)
KTF.set_learning_phase(1)
###CNN model###
input_img = Input(shape=(32, 32, 1))
conv_1 = Convolution2D(32, 5, 5, border_mode='same', activation='relu')(input_img)
pool_1 = MaxPooling2D((2, 2))(conv_1)
pool_1 = Dropout(0.1)(pool_1)
conv_2 = Convolution2D(64, 5, 5, border_mode='same', activation='relu')(pool_1)
pool_2 = MaxPooling2D((2, 2))(conv_2)
pool_2 = Dropout(0.2)(pool_2)
conv_3 = Convolution2D(128, 5, 5, border_mode='same', activation='relu')(pool_2)
pool_3 = MaxPooling2D((2, 2))(conv_3)
pool_3 = Dropout(0.3)(pool_3)
pool_3 = Flatten()(pool_3)
pool_1 = MaxPooling2D((4, 4))(pool_1)
pool_1 = Flatten()(pool_1)
pool_2 = MaxPooling2D((2, 2))(pool_2)
pool_2 =Flatten()(pool_2)
all_features = merge([pool_1, pool_2, pool_3], mode='concat')
logits = Dense(500,activation='relu')(all_features)
logits = Dropout(0.5)(logits)
res = Dense(43,activation='softmax')(logits)
c_model = Model(input_img, res)
c_model.summary()
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
c_model.compile(loss='categorical_crossentropy', optimizer= adam, metrics=['accuracy'])
tensor_board = TensorBoard(log_dir='./logs', histogram_freq=1)
history = c_model.fit(X_train, y_train, batch_size=128,nb_epoch=3,shuffle=True,verbose=1,validation_split=0.25,callbacks=[tensor_board])
loss_and_metrics = c_model.evaluate(X_test, y_test, batch_size=128)
KTF.set_session(old_session)
НО ошибка бывает следующим образом:
Файл "/home/jasontian/enter/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", строка 866, в исполняемом файле execfile (имя файла, пространство имен)
Файл "/home/jasontian/enter/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py", строка 102, в execfile exec (compile (f.read (), filename, 'exec' ), пространство имен)
Файл "/media/jasontian/keras_tf.py", строка 111, в history = c_model.fit (X_train, y_train, batch_size = 128, nb_epoch = 3, shuffle = True, verbose = 1, validation_split = 0.25, callbacks = [tensor_board ])
Файл "/home/jasontian/enter/lib/python3.5/site-packages/keras/engine/training.py", строка 1196, соответствует initial_epoch = initial_epoch) File "/ home / jasontian / enter / lib / python3. 5 / site-packages / keras / engine / training.py ", строка 911, в _fit_loop callbacks.on_epoch_end (epoch, epoch_logs)
Файл "/home/jasontian/enter/lib/python3.5/site-packages/keras/callbacks.py", строка 76, в on_epoch_end callback.on_epoch_end (эпоха, журналы)
Файл "/home/jasontian/enter/lib/python3.5/site-packages/keras/callbacks.py", строка 653, в on_epoch_end result = self.sess.run ([self.merged], feed_dict = feed_dict)
Файл "/home/jasontian/enter/lib/python3.5/site-packages/tensorflow/python/client/session.py", строка 766, при запуске run_metadata_ptr)
Файл "/home/jasontian/enter/lib/python3.5/site-packages/tensorflow/python/client/session.py", строка 921, в _run + e.args [0]) TypeError: Не удается интерпретировать ключ feed_dict как Тензор: не может преобразовать int в тензор.
Сначала я подумал, что это может быть y_train.dtype
(это float64), но я обнаружил, что это хорошо работает на примере. обновление: форма X_train (39209,32,32,1). Итак, как я могу это решить?