Кошмар распределения проекта Visual Studio с открытым исходным кодом

Следующий код работает для меня. Поскольку ваши имена (anchor, positive, negative), вы можете использовать их непосредственно в качестве ключей к своему словарю при передаче ввода. Кроме того, вы должны использовать слой concatenate в Keras вместо определения Lambda. Обратите внимание, что я изменил потери для целей этого примера.

from keras.layers import Input, Conv2D, MaxPooling2D, Flatten, concatenate
from keras.models import Model, Sequential
from keras.optimizers import Adam
from keras.losses import mean_squared_error
import numpy as np

def get_siamese_model(input_shape):


    # Define the tensors for the three input phrases
    anchor = Input(input_shape, name='anchor')
    positive = Input(input_shape, name='positive')
    negative = Input(input_shape, name='negative')

    # Convolutional Neural Network
    model = Sequential()
    model.add(Conv2D(64, kernel_size=(2, 2), activation='relu', input_shape=input_shape, padding='same'))
    model.add(Conv2D(32, kernel_size=(2, 2), activation='relu', padding='same'))
    model.add(Conv2D(16, kernel_size=(2, 2), activation='relu', padding='same'))
    model.add(Conv2D(8, kernel_size=(2, 2), activation='relu', padding='same'))
    model.add(Conv2D(4, kernel_size=(2, 2), activation='relu', padding='same'))
    model.add(Conv2D(2, kernel_size=(2, 2), activation='relu', padding='same'))
    model.add(Conv2D(1, kernel_size=(2, 2), activation='relu', padding='same'))
    model.add(MaxPooling2D(pool_size=(2,1)))
    model.add(Flatten())

    # Generate the encodings (feature vectors) for the three phrases
    anchor_out = model(anchor)
    positive_out = model(positive)
    negative_out = model(negative)

    # Add a concatenate layer
    output = concatenate([anchor_out, positive_out, negative_out])

    # Connect the inputs with the outputs
    siamese_net = Model(inputs=[anchor,positive,negative],outputs=output)

    # Error optimization
    siamese_net.compile(optimizer=Adam(), loss=mean_squared_error)

    # Summarize model
    siamese_net.summary()

    # Return the model
    return siamese_net

input_shape = (100, 100, 1)
model = get_siamese_model(input_shape)
X = {'anchor': np.ones((5, 100, 100, 1)),   # define input as dictionary
     'positive': np.ones((5, 100, 100, 1)), 
     'negative': np.ones((5, 100, 100, 1))}
Y = np.ones((5, 15000))
model.fit(X, Y)                        # use a dictionary
model.fit([i for i in X.values()], Y)  # use a list
7
задан 3 April 2009 в 15:39
поделиться

6 ответов

Вы могли использовать CMake в качестве инструмента сборки для Вашего проекта. Это генерирует файлы проекта VS для Вас, и можно просто открыть файл и использовать его для разрабатывания проекта. Проблемы преобразования не будут иметь значения, потому что можно просто использовать CMake для создания его снова.

Преимуществом CMake в этом случае является мобильность и независимость версии (также межплатформенная возможность сборки, но это не может быть релевантно). CMake действительно, однако, имеет определенную кривую обучения к нему, и это не совсем столь же просто как просто использование файла проекта, но это действительно решает проблему, которую Вы испытываете. Так как Ваш проект относительно прост, это может быть решение для Вас.

5
ответ дан 6 December 2019 в 11:53
поделиться

Нет никакого простого ответа. Мне жаль, что мы не сделали, все же. Ситуация только ухудшается с фактом в том 2005 вперед, также необходимо упаковать в redist, упаковывают или делают статическое подключение со временем выполнения. И у меня нет подсказки относительно того, что она сделает, если у Вас будет 2008 статически связанный двоичный файл, говорящий с более ранним поколением (ранее, чем 2005) приложение. Согласно MS, это должно работать.

Можно ли безопасно предположить, что у всех пользователей будет копия Visual Studio? И они все выполняют ту же версию? (Я знаю, специальный выпуск свободен в наше время...), необходимо будет рассказать базе пользователей о трудностях, если Вы продолжите преследовать этот путь и иметь их всех, используют ту же версию VS2008 для создания жизни легче для всех вокруг.

Я использовал бы make/gcc, чем наличие вращаются вокруг парка, все же.

2
ответ дан 6 December 2019 в 11:53
поделиться

Я думаю с помощью nmake, способ пойти - к сожалению, VC6 является последней версией, которая автоматически создала бы один для Вас на основе проекта.

Однако Вы говорите, что Ваш проект довольно прост, таким образом, это не должно быть главным барьером.

0
ответ дан 6 December 2019 в 11:53
поделиться

Нормальный способ сделать это должно поместить по сравнению с файлами проекта в подкаталоги решения. Например,

solution
 - build
 -- vc6
 -- vc7
 -- vc8
 -project1
 -- src
 -- build
 --- vc6
 --- vc7
 --- vc8
 -project2
 -- src
 -- build
 --- vc6
 --- vc7
 --- vc8

Затем, когда Вы добираетесь, новая версия по сравнению с - копируют последний каталог проекта, например, vc7 к vc8 - делают то же для решения - открывает решение, и файлы проекта в текстовом редакторе для фиксации любых путей - наконец открывают решение в новой версии по сравнению с и позволяют ему преобразовать проекты - (Используйте управление исходным кодом, как будто один или пути являются неправильными, что это обновляет проект в старом каталоге),

Это утомительно, но только необходимо сделать это каждые несколько лет.

Это - то, как мы раньше делали это, но существует лучший путь однако, и это должно использовать CMake для генерации проектов. Мы используем это теперь в работе, и она позволяет использованию использовать единственное определение проекта для работы исходно над окнами и Unix. На окнах мы используем по сравнению с проектами на Unix, мы используем затмение и make-файлы. Также CMake позволяет Вам абстрагировать общие настройки проекта как компилятор и флаги компоновщика, таким образом, они только должны быть изменены в одном месте.

Я теперь использую CMake для всех проектов C++, требую ли я его многоплатформенных возможностей или нет.

10
ответ дан 6 December 2019 в 11:53
поделиться

Одно решение, которое я видел используемый коммерческими библиотеками Windows, называет файлы решения с версией VS как суффикс (например: Project_VS2005.sln, Project_VS2008.sln, и т.д.). Все еще необходимо сохранить их в синхронизации, но Вы не должны изменять пути к файлам, или включать каталоги или изменить фактические файлы решения очень; просто сохраните несколько файлов, один для каждой версии VS, которая поддерживается. Необходимо сделать то же самое для файлов проекта, но по крайней мере Вы не должны менять содержание для поддержки различных структур каталогов, если Вы не хотите поддерживать здание бок о бок с несколькими версиями VS, и в случае, где Вы делаете Вас, только должны изменить выходные настройки для каждого различного файла проекта.

Не высказывание это - отличное решение, а скорее просто другая опция.

0
ответ дан 6 December 2019 в 11:53
поделиться

Я предложил бы, чтобы Вы использовали процесс с открытым исходным кодом. Выпустите свой код как VS 2008 и позвольте кому-то, кто использует более ранние версии для содействия файла решения для тех версий. Это - путь с открытым исходным кодом.

0
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: