from keras.datasets import mnist # subroutines for fetching the MNIST dataset
from keras.models import Model # basic class for specifying and training a neural network
from keras.layers import Input, Dense # the two types of neural network layer we will be using
from keras.utils import np_utils # utilities for one-hot encoding of ground truth values
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
batch_size = 128 # in each iteration, we consider 128 training examples at once
num_epochs = 16
hidden_size_1 = 512 # there will be 512 neurons in both hidden layers
hidden_size_2 = 512 # there will be 512 neurons in both hidden layers
height, width, depth = 28, 28, 1 # MNIST images are 28x28 and greyscale
num_classes = 10 # there are 10 classes (1 per digit)
(X_train, y_train), (X_test, y_test) = mnist.load_data() # fetch MNIST data
num_train, width, depth = X_train.shape # there are 50000 training examples in mnist
num_test = X_test.shape[0] # there are 10000 test examples in mnist
num_classes = np.unique(y_train).shape[0] # there are 10 image classes
#Visualizing
I_train = list()
I_test = list()
fig, axes = plt.subplots(1,10,figsize=(10,10))
for k in range(10):
i = np.random.choice(range(len(X_train)))
I_train.append(i)
axes[k].set_axis_off()
axes[k].imshow(X_train[i:i+1][0], cmap='gray')
fig, axes = plt.subplots(1,10,figsize=(10,10))
for k in range(10):
i = np.random.choice(range(len(X_test)))
I_test.append(i)
axes[k].set_axis_off()
axes[k].imshow(X_test[i:i+1][0], cmap='gray')
perm = np.array([153, 17, 7, 148, 191, 15, 73, 109, 180, 129, 2, 218, 122,
151, 227, 167, 40, 248, 66, 212, 197, 101, 211, 139, 234, 133,
168, 174, 53, 207, 219, 37, 246, 194, 239, 255, 107, 90, 22,
44, 215, 84, 102, 201, 61, 176, 72, 125, 56, 99, 156, 161,
226, 6, 238, 52, 27, 50, 216, 231, 71, 5, 25, 34, 62,
29, 166, 253, 220, 3, 24, 225, 130, 196, 113, 86, 150, 209,
65, 195, 1, 200, 41, 81, 69, 163, 33, 147, 230, 202, 232,
112, 241, 137, 47, 187, 203, 175, 229, 39, 160, 186, 152, 222,
14, 85, 21, 77, 210, 108, 193, 250, 54, 45, 92, 141, 94,
208, 110, 192, 228, 115, 91, 143, 26, 88, 96, 170, 78, 87,
132, 172, 247, 178, 205, 165, 177, 144, 83, 49, 11, 67, 82,
134, 245, 100, 18, 48, 136, 213, 105, 162, 199, 103, 252, 214,
158, 189, 149, 95, 164, 111, 233, 181, 142, 249, 9, 236, 38,
173, 243, 57, 28, 128, 55, 32, 116, 59, 145, 97, 35, 106,
43, 206, 198, 60, 135, 74, 23, 76, 251, 120, 240, 75, 20,
169, 179, 121, 80, 217, 123, 235, 126, 114, 16, 155, 146, 119,
19, 8, 51, 98, 42, 185, 127, 93, 190, 104, 224, 171, 244,
124, 89, 68, 0, 4, 117, 182, 70, 64, 159, 157, 242, 188,
10, 30, 36, 58, 138, 118, 204, 184, 221, 13, 254, 31, 12,
140, 63, 223, 79, 46, 154, 183, 131, 237])
"""
perm = np.array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16])
"""
#perm = np.arange(28*28)
#perm = np.random.permutation(256)
X_train = X_train.reshape(num_train, height * width)
X_test = X_test.reshape(num_test, height * width)
XX_test = np.copy(X_test)
XX_train = np.copy(X_train)
for j in xrange(X_test.shape[1]):
for i in xrange(X_test.shape[0]):
X_test[i][j] = perm[XX_test[i][j]]
for i in xrange(X_train.shape[0]):
X_train[i][j] = perm[XX_train[i][j]]
X_train = X_train.reshape(num_train, height, width)
X_test = X_test.reshape(num_test, height, width)
#Visualizing
fig, axes = plt.subplots(1,10,figsize=(10,10))
for k in range(10):
i = I_train[k]
axes[k].set_axis_off()
axes[k].imshow(X_train[i:i+1][0], cmap='gray')
fig, axes = plt.subplots(1,10,figsize=(10,10))
for k in range(10):
i = I_test[k]
axes[k].set_axis_off()
axes[k].imshow(X_test[i:i+1][0], cmap='gray')
X_train = X_train.reshape(num_train, height * width) # Flatten data to 1D
X_test = X_test.reshape(num_test, height * width) # Flatten data to 1D
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= np.max(X_train) # Normalise data to [0, 1] range
X_test /= np.max(X_test) # Normalise data to [0, 1] range
Y_train = np_utils.to_categorical(y_train, num_classes) # One-hot encode the labels
Y_test = np_utils.to_categorical(y_test, num_classes) # One-hot encode the labels
inp = Input(shape=(height * width,)) # Our input is a 1D vector of size 784
hidden_1 = Dense(hidden_size_1, activation='relu')(inp) # First hidden ReLU layer
hidden_2 = Dense(hidden_size_2, activation='relu')(hidden_1) # Second hidden ReLU layer
out = Dense(num_classes, activation='softmax')(hidden_2) # Output softmax layer
model = Model(input=inp, output=out) # To define a model, just specify its input and output layers
model.compile(loss='categorical_crossentropy', # using the cross-entropy loss function
optimizer='adam', # using the Adam optimiser
metrics=['accuracy']) # reporting the accuracy
model.fit(X_train, Y_train, # Train the model using the training set...
batch_size=batch_size, nb_epoch=num_epochs,
verbose=1, validation_split=0.1) # ...holding out 10% of the data for validation
model.evaluate(X_test, Y_test, verbose=1) # Evaluate the trained model on the test set!
Перемешивание производится на исходных и нормализация происходит.
Я не переоцениваю свои знания в области ИИ, но объяснения у меня нет. Для данной сети все точки равноправны и все значения равноправны в исходном сигнале.
Это очень интересная статья. Зависимость продаж сезонных товаров от сезонов очевидна и тривиальна и кодить там нечего.
Но если в возвратах лежит 30% то это проблема! Это МЕГА проблема бизнеса и проблема требующая внимания исследователей.
Вот такой остаток у меня отложился от статьи если слить с нее лирику и картинки.
А зачем каменщику сопромат или зачем архитектору мозоли от мастерка?
Каменщик со знаанием сопромата ничем не лучше другого, а архитектор с мозолями совсем не нужен.
Врядли Гауди или Фиораванти сами лично таскали кирпичи и клали их ровнее и краше своих работяг.
Поэтому отделяйте пожалуйста. В СССР программист получался в техникуме и не нужно было ему никакое высшее образование. Высшее образование нужно только для создания нового. Новизна без фундаментального образования получается только у гениев или случайно.
Как у Ньютона «я стоял на плечах гениев» поэтому и видел дальше.
В теории M&A имеет смысл покупать только неэффективный бизнес. Покупка эффективного бизнеса всегда прибыли не приносит.
Ну стратегия бизнеса «вызвать доверие и кинуть» порочна изначально и все такие бизнесы для волчар из, например, А1 это как откормленные овцы.
Теория игр задача о двух заключенных — больше полста лет и мне ее на третьем курсе подробно изложили.
Не читал Фоменко и Задорнова давно не слушал. Байку эту рассказали в яхтклубе давно очень и читал потом про это.
Но Вы правы однозначно в том, что любая идея в серьезном обществе требует или собственной компетенциии или проф ссылки.
Поясню, наверно не поняли.
Вначале секс с матерью имел другое значение, как секс с матерью бога, что для христиан оскорбительно и татаромонголы, будучи уже мусульманами и ранее язычниками это оскорбление практиковали. Потом, когда надсмоторщиками стали православные слуги, слова про бога были выпилены и осталась просто мать.
Для испанца или португальца, моря были их, оскорбить божью матерь немыслимое святотатство и никогда испанец испанцу такое не сказал бы… Нет и не было у них такого ругательства. Для французского дворянина то, что с его мамой занимался сексом сам король — ну никак не оскорбление! Никого оскорбления с мамой у них нет и не было. У них есть оскорбление происхождения — бастард — ну так это не совсем про то, с кем занималась сексом мама.
Так что «mothafucka»- исключительно русский продукт.
Жаль не смог быстро найти профф ссылки. Но идея точно такая была изложена.
Все моряки всех флотов матерятся по русски. В переводе, конечно, слова их, но постановка фразы и смысл русский. Прослеживается смысл оскорбления от монголотатарского ига, которого у них не было.
У англичан, португальцев и испанцев не было таких ругательств.
Есть различия между приобретением и повышением квалификации.
Если заниматься самообразованием, то можно пропустить целый раздел. Типа как «искать под фонарем», а не там где нужно. Образование должно быть фундаментальным.
Есть такие разделы, с виду сухой матан, а присмотришься, нееет, ставит границы достижимого и вычислимого в реальных проектах.
Да и первый язык изучают самый простой и наглядный для того, что бы объяснить сущность алгоритма и саму природу дискретной вычислимости.
А не для того, что на этом языке потом выходили в продакшен
Был еще другой путь
Алгол, фортран, Пл1 и ассемблер 360/370.
Очень популярный в те далекие времена путь.
После ассемблера 360/370 любой другой язык можно и не учить, достаточно справочника
Не вижу различий.
Детализация принятия решения головкой машины абсолютно неважна, квантовая она или еще какая цветная.
Главное, что есть правильный ход и она его может сделать.
Ну так у него самого не может быть номера.
Сам он на своем номере должен дать с одной стороны что то, а с другой это что то +1.
Т.е. запускаете свой пример на его же номере. И получится противоречие.
Плохой я лектор.
Если интересны проблемы разрешимости, то посмотрите как решали 10 проблему Гильберта. Гильберт был уверен, что поиск алгоритма для разрешения диофантоввх уравнений дело пары лет. Но только через 70 лет Матиясевич поставил точку — нет и не может быть такого алгоритма. Но это не исключает того, что для каждого конкретного диофантового уравнения люди найдут такой критерий. Для уравнения Ферма нашли же.
Да нет же.
Возьмите и занумеруйте все исходники ( если их счетно ) и тогда скажите мне номер исходника, который на входе Х запускает исходник с номером Х, к результату прибавляет 1 и выдает как результат.
И у этого исходника, вполне правильно составленного, нет и не может быть номера.
Так как же нейронным сетям не нужен алгоритм?
За их дедушку, «симплекс метод», Канторович получил нобелевскую премию по экономике, к слову.
Если на входе вектор, а на выходе число, то это однозначно и непоколебимо умножение входного вектора на вектор преобразования.
Так подбор вектора преобразования и есть алгоритм обучения сети, а само умножение векторов и есть алгоритм работы сети.
Реализация может быть сложной и заковыристой, с притопами, прихлопами, цветными бумажками и их подругами, но суть! не меняется.
Как же тут без алгоритмов то.
Перемешивание производится на исходных и нормализация происходит.
Я не переоцениваю свои знания в области ИИ, но объяснения у меня нет. Для данной сети все точки равноправны и все значения равноправны в исходном сигнале.
Но если в возвратах лежит 30% то это проблема! Это МЕГА проблема бизнеса и проблема требующая внимания исследователей.
Вот такой остаток у меня отложился от статьи если слить с нее лирику и картинки.
И это к теории вероятностей никакого отношения не имеет.
И это совсем о другом.
ru.m.wikipedia.org/wiki/Задача_коммивояжёра
это немного о другом и даже задача «о Кенигсбергских мостах» может и похожа но тоже о другом.
Каменщик со знаанием сопромата ничем не лучше другого, а архитектор с мозолями совсем не нужен.
Врядли Гауди или Фиораванти сами лично таскали кирпичи и клали их ровнее и краше своих работяг.
Поэтому отделяйте пожалуйста. В СССР программист получался в техникуме и не нужно было ему никакое высшее образование. Высшее образование нужно только для создания нового. Новизна без фундаментального образования получается только у гениев или случайно.
Как у Ньютона «я стоял на плечах гениев» поэтому и видел дальше.
Ну стратегия бизнеса «вызвать доверие и кинуть» порочна изначально и все такие бизнесы для волчар из, например, А1 это как откормленные овцы.
Теория игр задача о двух заключенных — больше полста лет и мне ее на третьем курсе подробно изложили.
Есть тезис, что им стало лучше, но что оно такое в этом случае «лучше» так и раскрыто.
Но Вы правы однозначно в том, что любая идея в серьезном обществе требует или собственной компетенциии или проф ссылки.
Вначале секс с матерью имел другое значение, как секс с матерью бога, что для христиан оскорбительно и татаромонголы, будучи уже мусульманами и ранее язычниками это оскорбление практиковали. Потом, когда надсмоторщиками стали православные слуги, слова про бога были выпилены и осталась просто мать.
Для испанца или португальца, моря были их, оскорбить божью матерь немыслимое святотатство и никогда испанец испанцу такое не сказал бы… Нет и не было у них такого ругательства. Для французского дворянина то, что с его мамой занимался сексом сам король — ну никак не оскорбление! Никого оскорбления с мамой у них нет и не было. У них есть оскорбление происхождения — бастард — ну так это не совсем про то, с кем занималась сексом мама.
Так что «mothafucka»- исключительно русский продукт.
Жаль не смог быстро найти профф ссылки. Но идея точно такая была изложена.
У англичан, португальцев и испанцев не было таких ругательств.
Если заниматься самообразованием, то можно пропустить целый раздел. Типа как «искать под фонарем», а не там где нужно. Образование должно быть фундаментальным.
Есть такие разделы, с виду сухой матан, а присмотришься, нееет, ставит границы достижимого и вычислимого в реальных проектах.
Да и первый язык изучают самый простой и наглядный для того, что бы объяснить сущность алгоритма и саму природу дискретной вычислимости.
А не для того, что на этом языке потом выходили в продакшен
Алгол, фортран, Пл1 и ассемблер 360/370.
Очень популярный в те далекие времена путь.
После ассемблера 360/370 любой другой язык можно и не учить, достаточно справочника
Ну и что б как у людей
Детализация принятия решения головкой машины абсолютно неважна, квантовая она или еще какая цветная.
Главное, что есть правильный ход и она его может сделать.
Быстро находит решение сложных задач, но никто не знает как.
Сам он на своем номере должен дать с одной стороны что то, а с другой это что то +1.
Т.е. запускаете свой пример на его же номере. И получится противоречие.
Плохой я лектор.
Если интересны проблемы разрешимости, то посмотрите как решали 10 проблему Гильберта. Гильберт был уверен, что поиск алгоритма для разрешения диофантоввх уравнений дело пары лет. Но только через 70 лет Матиясевич поставил точку — нет и не может быть такого алгоритма. Но это не исключает того, что для каждого конкретного диофантового уравнения люди найдут такой критерий. Для уравнения Ферма нашли же.
Возьмите и занумеруйте все исходники ( если их счетно ) и тогда скажите мне номер исходника, который на входе Х запускает исходник с номером Х, к результату прибавляет 1 и выдает как результат.
И у этого исходника, вполне правильно составленного, нет и не может быть номера.
За их дедушку, «симплекс метод», Канторович получил нобелевскую премию по экономике, к слову.
Если на входе вектор, а на выходе число, то это однозначно и непоколебимо умножение входного вектора на вектор преобразования.
Так подбор вектора преобразования и есть алгоритм обучения сети, а само умножение векторов и есть алгоритм работы сети.
Реализация может быть сложной и заковыристой, с притопами, прихлопами, цветными бумажками и их подругами, но суть! не меняется.
Как же тут без алгоритмов то.
Либо вы производите стоимость либо присваиваете произведенную другими — как то так было у него.