del reduced_data clustering_model.fit(x=reduced_data_array, y=y_clusters, epochs=300) clustering_model.predict(reduced_data_array) from keras.engine.sequential import Sequential jdesc_model = Sequential() first_layer = Dense(units=32, input_shape=(num_genes, ), activation="relu") jdesc_model.add(first_layer) second_layer = Dense(units=16, activation="tanh") jdesc_model.add(second_layer) third_layer = Dense(units=num_clusters, activation="sigmoid") jdesc_model.add(third_layer) jdesc_model.compile(optimizer="sgd", loss="categorical_hinge") jdesc_model_weights = desc_model.get_weights() + clustering_model.get_weights() jdesc_model.set_weights(jdesc_model_weights) jdesc_model_predictions = jdesc_model.predict(adata.X) predicted_clusters_array = jdesc_model_predictions.argmax(axis=1) clusters_array = clusters_ndarray.T[0] error_array = np.zeros(shape=(num_clusters, num_clusters)) correct_array = np.zeros(shape=(num_clusters, ), dtype=int) for i in range(num_cells): if clusters_array[i] != predicted_clusters_array[i]: error_array[clusters_array[i], predicted_clusters_array[i]] += 1 else: correct_array[clusters_array[i]] += 1 correct_percentage = correct_array / np.bincount(clusters_array) #%% import random
validation_split=0.2, verbose=1 ) #validation split - часть наборя для обучения используется для проверки #x_train - вход, y_train - выход, batch_size - размер минивыборки для метода градиентного спуска(то есть мы берем 200 изображений, рассчитываем функцию ошибки, потом расчитываем градиент и изменяем веса), epochs - сколько раз мы обучаем нейросеть на одном и том же наборе данных, verbose - позволяет печатать прогресс обучения нейросети #запускаем процесс оценки качества на тестовой выборке scores = model.evaluate(x_test, y_test, verbose=1) print("Доля верных ответов на тестовых данных, в процентах: ", round(scores[1] * 100, 4)) #запускаем сеть на тестовых данных(10 случайных) for i in range(1, 11): n_rec = rnd.randint(0, 10000) #элемент массива x_test print("Выбран элемент массива x_test под номером: ", n_rec) plt.imshow(x_test[n_rec].reshape(28, 28), cmap=plt.cm.binary) #показываем наше изображение для теста label = np.argmax( y_test[n_rec], axis=0 ) #здесь мы находим максимальный элемент массива y_test и выводим его индекс, соответствующий номеру класса plt.xlabel(classes[label]) plt.show() testone = x_test[n_rec] testone = np.expand_dims(testone, axis=0) #нормализуем изображение prediction = model.predict(testone) prediction = np.argmax( prediction[0] ) #здесь мы находим максимальный элемент массива prediction и выводим его индекс, соответствующий номеру класса print("Ответ нейросети: ", classes[prediction]) label = np.argmax(y_test[n_rec], axis=0) print("Правильный ответ: ", classes[label]) #переобучение наступает, когда val_acc начинает падать, это значит, что нейросеть учится распознавать только элементы конкретной выборки, а не общие особенности #все параметры выбраны оптимальными экспериментально
#! /usr/bin/python from keras import backend as k from keras.engine.sequential import Sequential from keras.layers.embeddings import Embedding import numpy as np model = Sequential() model.add(Embedding(100, 64, input_length=10)) input_array = np.random.randint(1000, size=(32,10)) model.compile('rmsprop', 'mse') output_array = model.predict(input_array) assert output_array == (32, 10, 64)