All streams
Search
Write a publication
Pull to refresh
21
0.2
Петр @ChePeter

Пользователь

Send message
Если это для инженеров, то нужно считать битовые операции.
Неожиданный взгяд на проблемы сложности алгоритмов.
Обычно оценивается алгоритм, потом только его реализация, котора зависит от железа/системы существенно.
Мне кажется корректно сравнивать реализации одного и того же алгоритма или различные алгоритмы.
?«Подпись произвольных данных алгоритмом шифрования RSA»
Как то не понятно, нужно пояснить.
В биткойн применяется алгоритм дискретного логарифмирования в группе порожденной эллиптической кривой — а это один из самых распространенных «блокчейнов»
«Соотношение положительных к отрицательным примерам 1 к 4, 8000 положительных и 2000 отрицательных.» — чего то так.
Хотел в статье по последней метке провести аналогию 1 курс — MLP, 2 курс -CNN ну и т.д. и посмотреть как можно/нельзя учить «старшекурсников», но реально не хватает мощности карты, очень долго.
На будущее неплохое исследование.
Если оставить только последние «9» (5949 шт) в интересующем варианте (0..01..12..23...78..89..9) т.е. последнюю последовательность «9», а начало вернуть, как в исходной последовательности, тогда получится результат выше.

PS. Извиняюсь за телеграфный стиль
Проверка гипотезы
from keras import backend as K_B
from keras.datasets import mnist
from keras.layers import Input, Dense, Dropout
from keras.models import Sequential
from keras.optimizers import RMSprop
from keras.utils import np_utils
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

batch_size = 12
epochs = 12
hidden_size = 512

(X_train, y_train), (X_test, y_test) = mnist.load_data()

num_train, width, height = X_train.shape
num_test = X_test.shape[0]
num_classes = np.unique(y_train).shape[0]

X_train = X_train.astype('float32') 
X_test = X_test.astype('float32')
X_train /= 255.
X_test /= 255.
X_train = X_train.reshape(num_train, height * width)
X_test = X_test.reshape(num_test, height * width)

XX_train = np.copy(X_train)
yy_train = np.copy(y_train)
XX_test = np.copy(X_test)
yy_test = np.copy(y_test)

perm = np.arange(num_train, dtype='int')
j = 0
for k in xrange(num_classes):
    for i in xrange(num_train):
        if (yy_train[i] == k):
            perm[j] = i
            j += 1

for k in xrange(num_train):
    X_train[k,...] = XX_train[perm[k],...]
    y_train[k] = yy_train[perm[k]]

Y_train = np_utils.to_categorical(y_train, num_classes)
Y_test = np_utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(width * height,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(), # RMSprop(),'adam'
              metrics=['accuracy'])

history = model.fit(X_train, Y_train,
                    shuffle = False,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=2,
                    validation_data=(X_test, Y_test))

for n in xrange(10):    
    j = 0
    i = 0
    for k in xrange(num_test):
        if (yy_test[k] >= 8 ):
            X_test[j,...] = XX_test[k,...]
            y_test[j] = yy_test[k]
        else:
            X_test[j,...] = X_test[i,...]
            y_test[j] = y_test[i]
            i += 1
        j += 1
    Y_test = np_utils.to_categorical(y_test, num_classes)

    score = model.evaluate(X_test, Y_test, verbose=0)
    print ' remove ', 9 - n
    print('Test accuracy:', score[1])

fedorro

Если сделать всё тоже, но в тестовой последовательности оставить только «8» и «9» то сеть совсем ничего не понимает. Т.е. тренируем на упорядоченной последовательности, а результат получаем на test, но без некоторых цифр.
листинг
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
22s — loss: 12.7203 — acc: 0.2105 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 2/12
22s — loss: 13.0790 — acc: 0.1885 — val_loss: 14.4487 — val_acc: 0.1028
Epoch 3/12
22s — loss: 11.0910 — acc: 0.3115 — val_loss: 14.4550 — val_acc: 0.1028
Epoch 4/12
22s — loss: 11.5997 — acc: 0.2798 — val_loss: 14.6790 — val_acc: 0.0892
Epoch 5/12
22s — loss: 10.4851 — acc: 0.3490 — val_loss: 14.6563 — val_acc: 0.0892
Epoch 6/12
22s — loss: 9.7669 — acc: 0.3937 — val_loss: 14.5344 — val_acc: 0.0982
Epoch 7/12
22s — loss: 9.6686 — acc: 0.3999 — val_loss: 14.5332 — val_acc: 0.0982
Epoch 8/12
22s — loss: 9.5976 — acc: 0.4043 — val_loss: 14.5219 — val_acc: 0.0982
Epoch 9/12
22s — loss: 7.6871 — acc: 0.5226 — val_loss: 14.4882 — val_acc: 0.1009
Epoch 10/12
22s — loss: 9.9656 — acc: 0.3814 — val_loss: 14.5188 — val_acc: 0.0982
Epoch 11/12
22s — loss: 9.6053 — acc: 0.4038 — val_loss: 14.5128 — val_acc: 0.0982
Epoch 12/12
22s — loss: 9.5696 — acc: 0.4060 — val_loss: 14.4895 — val_acc: 0.0982
remove 9
('Test accuracy:', 0.00020000000000000001)
remove 8
('Test accuracy:', 0.00020000000000000001)
remove 7
('Test accuracy:', 0.00020000000000000001)
remove 6
('Test accuracy:', 0.00020000000000000001)
remove 5
('Test accuracy:', 0.00020000000000000001)
remove 4
('Test accuracy:', 0.00020000000000000001)
remove 3
('Test accuracy:', 0.00020000000000000001)
remove 2
('Test accuracy:', 0.00020000000000000001)
remove 1
('Test accuracy:', 0.00020000000000000001)
remove 0
('Test accuracy:', 0.00020000000000000001)

По очереди удаляем по одной цифре из test последовательности
for n in xrange(10):    
    j = 0
    i = 0
    for k in xrange(num_test):
        if (yy_test[k] != 9 - n ):
            X_test[j,...] = XX_test[k,...]
            y_test[j] = yy_test[k]
        else:
            X_test[j,...] = X_test[i,...]
            y_test[j] = y_test[i]
            i += 1
        j += 1
    Y_test = np_utils.to_categorical(y_test, num_classes)

    score = model.evaluate(X_test, Y_test, verbose=0)
    print ' remove ', 9 - n
    print('Test accuracy:', score[1])


листинг
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
22s — loss: 12.7232 — acc: 0.2104 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 2/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 3/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 4/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 5/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 6/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 7/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 8/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 9/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 10/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 11/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
Epoch 12/12
22s — loss: 14.3070 — acc: 0.1124 — val_loss: 14.2887 — val_acc: 0.1135
remove 9
('Test accuracy:', 0.1278)
remove 8
('Test accuracy:', 0.12670000000000001)
remove 7
('Test accuracy:', 0.12839999999999999)
remove 6
('Test accuracy:', 0.12659999999999999)
remove 5
('Test accuracy:', 0.1258)
remove 4
('Test accuracy:', 0.12759999999999999)
remove 3
('Test accuracy:', 0.12790000000000001)
remove 2
('Test accuracy:', 0.1285)
remove 1
('Test accuracy:', 0.0)
remove 0
('Test accuracy:', 0.12709999999999999)
Если оставить только последние «9» (5949 шт) MLP учится и результат
step 0
('Test accuracy:', 0.97360000000000002)
('Test accuracy:', 0.9758)
('Test accuracy:', 0.77300000000000002)
step 1
('Test accuracy:', 0.97460000000000002)
('Test accuracy:', 0.97509999999999997)
('Test accuracy:', 0.88370000000000004)
step 2
('Test accuracy:', 0.97550000000000003)
('Test accuracy:', 0.97299999999999998)
('Test accuracy:', 0.83389999999999997)

Эта последовательность «9» в конце приводит к переобучению, но предыдущие результаты не затираются, когда они есть.
Статья, в том числе, о том, что на одинаковой последовательности MLP не учится совсем.
«Тупой код», как правило, написан кем то другим.
Про то и речь!
Что реестр недвижимости один и у одного.
И неважно, вешают Вам лапшу онлайн или на бумаге или еще как.
Вы должны верить одному(человеку/конторе/машине и т.д.) и эту проблему блокчейн решает.
Ни владельцы реестра, ни его управляющие, ни тех персонал не смогут просто так его изменить.
Но если все, то кто ведет у себя реестр(блокчейновский), вдруг решат, что этот домик не Ваш, то так тому и быть. Вот такое прямое народовластие ( почти суд Линча))).
Это они до поры до времени чужие и могут стать своими родными в любой момент времени.
Вот приехали/послали Вас в страну… ляндию и хотите купить/арендовать что то для себя или корпорации и в местном реестре Вы вынуждены верить тому перцу, что принесет Вам бумажку-выписку и проверить его ну никак. Так что для учета недвижимости блокчейн самое оно.
«Стянул ключ» про идентификацию. А я про учёт.
Сейчас можно купить недвижимость и только потом узнать про нее много интересного.
Блокчейн хорош для учета прав на недвижимость. Просто и надежно проследить всю историю участка земли, как был образован, как делился или присоединялся, кто владел им и/или частями и т.д.
Трудно подделать и легко проверить.
Любой владелец недвижимости может держать у себя всю базу и мониторить все изменения и так содержать инфраструктуру.

Не совсем убедили.
Алгоритм то заявленные требования обеспечивал и то, что при определенных параметрах нет секретности, так и кривые есть сингулярные.
Есть рекомендованные ГОСТ параметры кривой, так и на веру их и принимают все.
И тот же NIST всегда указывал, что параметры a,b,… выбраны по критерию простоты вычислений.
В биткойне так вообще a=0 ( проще некуда) и что-то мне подсказывает, что не спроста ))
Но я еще не встречал, что бы в основе уязвимости лежал на баг, а закладка.
Поправьте меня, если вдруг что то не заметил
Именно баги превращаются в уязвимости, увы
Ага, сколько лет проверялся OpenSSL?
habrahabr.ru/sandbox/100878
Этой ошибке много лет и это в пакете за которым следят миллионы глаз.
Если Вы про сделки, то возможно. А я про учет «финансовых вложений».
Если Вы меняете фантик на что угодно — вполне легальная сделка. Но что бы сделка с криптой была легальной, т.е. что бы Дядя Сэм и Тётя Дуся не приставали потом, нужно правильно назвать крипту в существующих терминах и правильно отразить сделку в учете. Вот про это правильное наименование и идет спор с автором. И никак не про сделки.
Если Вы деньги со счета сняли и ничего легального не положили, то с их точки зрения это плохо и автор топика предлагает назвать то, что положили «финансовые вложения», мол все верно. А мне кажется, исходя из внимательного многолетнего прочтения текстов над моей подписью, что биткойн не попадает в раздел «финансовые вложения».
Я про право получить деньги или выгоду, а не отдать или что совершить.
Любой из этих товарищей в любое время может покинуть ряды майнеров, и они все сразу могут покинуть и никаких претензий к ним.
«Право создать кошелек» — смешно, оно у Вас и без них есть.

Information

Rating
2,718-th
Date of birth
Registered
Activity

Specialization

Business Analyst, Data Analyst
Lead